我正在尝试将这个问题中的查询转换为 mySql,因为我们将数据从访问数据库移动到新结构。
我想出了以下内容,因为有多个条件(“值”或“未竞争”),并且我收到以下错误(已解决,请参阅下面的编辑 2)。
1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以获取正确的语法,以便在 'then 0 else 1 end) AS 'Total Weapons', SUM( case when ( tourney_info.c_we' at line 7) 附近使用
查询如下:
SELECT school_num, 'Total Form and Sparring', 'Total Weapons', 'Total Combat', 'Total Form and Sparring' + 'Total Weapons' + 'Total Combat' AS 'Total Entries'
FROM
(
SELECT
tourney_info.school_num,
SUM( case when tourney_info.t_forms IN ('', 'Did Not Compete') AND tourney_info.spar IN ('','Did Not Compete')
then 0
else 1
end) AS 'Total Form and Sparring',
SUM( case when tourney_info.t_weps IN ('','Did Not Compete') then 0 else 1 end) AS 'Total Weapons',
SUM( case when tourney_info.c_weps IN ('', 'Did Not Compete') then 0 else 1 end) AS 'Total Combat'
FROM
tourney_info
WHERE school_num = '546' AND tourn_date > '2018-04-20' AND tourn_date < '2018-04-22'
) AS derived
根据评论解决错误后,查询将提供以下结果:
school_num Total Form and Sparring Total Weapons Total Combat Total Entries
546 Total Form and Sparring Total Weapons Total Combat 0
编辑 #2,在查看字段规范后,作为测试查询显示有人将字段设置为 10 个字符,并且我的“不竞争”在导入时被截断:
如果我按如下方式取出内部查询,我会得到个人总数,但是我没有得到累计总数:
SELECT
tourney_info.school_num, 'Total Form and Sparring' + 'Total Weapons' + 'Total Combat' AS 'Total Entries',
SUM( case when tourney_info.t_forms IN ('', 'Did Not Co') AND tourney_info.spar IN ('','Did Not Co')
then 0
else 1
end) AS 'Total Form and Sparring',
SUM( case when tourney_info.t_weps IN ('','Did Not Co') then 0 else 1 end) AS 'Total Weapons',
SUM( case when tourney_info.c_weps IN ('','Did Not Co') then 0 else 1 end) AS 'Total Combat'
FROM
tourney_info
WHERE tourney_info.school_num = '546' AND tourney_info.tourn_date > '2018-04-20' AND tourney_info.tourn_date < '2018-04-22'
结果集:
school_num Total Entries Total Form and Sparring Total Weapons Total Combat
546 0 36 17 25
在最新的迭代(编辑#5)中,问题是您不能在声明它们的查询中使用列别名。您可以返回原始查询(获取子查询中每个类别的总数,并使用主查询中的别名将它们加在一起),或者执行以下操作:
-->
这是因为“布尔”表达式的计算结果为 1(真)或 0(假)。