为什么MySQL CASE语句返回空列?
我试图在透视表中显示游戏结果。我的结果表如下所示:为什么MySQL CASE语句返回空列?,mysql,sql,case,Mysql,Sql,Case,我试图在透视表中显示游戏结果。我的结果表如下所示: StageID StringID ShooterID FinalScore ------------------------------------------ 1 1 10041 6.579 1 3 10040 18.008 1 2 10040 13.639 1 1 10
StageID StringID ShooterID FinalScore
------------------------------------------
1 1 10041 6.579
1 3 10040 18.008
1 2 10040 13.639
1 1 10040 9.895
1 3 10051 15.464
1 2 10051 23.842
1 1 10051 21.018
1 3 10041 13.601
1 2 10041 8.151
2 1 10041 49.5
2 2 10041 59.5
2 3 10041 49.5
2 1 10040 69.5
2 3 10040 39.5
2 1 10051 109.5
2 2 10051 89.5
2 3 10051 99.5
2 2 10040 59.5
... many more rows
为了透视数据,我正在使用动态sql。这是我的剧本:
SET @sql = NULL;
SELECT group_concat(DISTINCT
concat( 'sum(CASE WHEN `StageID` = ', `StageID` ,' THEN FinalScore END) Stage',`StageID`)
) INTO @sql
FROM
`results`;
SET @sql = concat('SELECT ShooterID, ', @sql ,'
FROM
`results`
WHERE
matchID = 118
GROUP BY ShooterID');
prepare stmt FROM @sql;
execute stmt;
DEALLOCATE prepare stmt;
结果如下:
ShooterID Stage0 Stage99 Stage1 Stage2
------------------------------------------
10039 NULL NULL 38.259 188.5
10040 NULL NULL 41.542 168.5
10041 NULL NULL 28.331 158.5
10042 NULL NULL 59.975 355.5
10043 NULL NULL 49.233 198.5
10047 NULL NULL 33.156 218.5
10048 NULL NULL 33.214 358.5
10051 NULL NULL 60.324 298.5
10052 NULL NULL 30.742 278.5
10053 NULL NULL 62.487 268.5
问题是我得到了两列(Stage0和Stage99),我不明白为什么。结果表中只有两个阶段。有什么想法吗
更新:调试此脚本时,我确定Workbench正在组_concat()期间创建以下字符串:
我可以做些什么来阻止Workbench这样做吗?您在select语句中引用的是
matchID
(示例中的列是StringID
),但在其他情况下,该语句作为expecetd(在给定的一小部分数据上)工作,请参见此处:。正如@hjpotter所指出的,原因可能在于数据本身(对于StringID=118
),因此也许您可以提供更多的数据?您在select语句中引用的matchID
(示例中的列是StringID
),但在其他情况下,该语句可以作为expected(对于给定的一小部分数据),请参见此处:。正如@hjpotter所指出的,原因可能在于数据本身(对于StringID=118
),因此,如果可能,您可以提供更多数据?;提供一个sqlfiddle。这是一个case表达式,不是case语句……如果可能,请;提供一个sqlfiddle。这是一个case表达式,不是case语句……谢谢你的帮助。为了简化问题陈述,我省略了MatchID列。当我将它添加到SQLFIDLE查询中时,语句运行良好。我的问题似乎与我使用MySQL工作台有关。我还在phpMyAdmin中运行脚本,它在那里也运行得很好。现在,我将把问题追到兔子洞里:)谢谢你的提琴。为了简化问题陈述,我省略了MatchID列。当我将它添加到SQLFIDLE查询中时,语句运行良好。我的问题似乎与我使用MySQL工作台有关。我还在phpMyAdmin中运行脚本,它在那里也运行得很好。现在我将把问题追到兔子洞里:)
'SELECT ShooterID,
sum(CASE WHEN `StageID` = 0 THEN FinalScore END) - max(CASE WHEN `StageID` = 0 THEN FinalScore END) Stage0,
sum(CASE WHEN `StageID` = 99 THEN FinalScore END) - max(CASE WHEN `StageID` = 99 THEN FinalScore END) Stage99,
sum(CASE WHEN `StageID` = 1 THEN FinalScore END) - max(CASE WHEN `StageID` = 1 THEN FinalScore END) Stage1,
sum(CASE WHEN `StageID` = 2 THEN FinalScore END) - max(CASE WHEN `StageID` = 2 THEN FinalScore END) Stage2\n FROM\n `wp_plinker_results`\n WHERE\n matchID = 118\n GROUP BY ShooterID'