如何不直接使用pivot语句实现SQL数据透视统计
不使用PIVOT实现SQL行转列的解决方法
注:你给出的预期输出中
103应为笔误,样例数据中仅存在ID 100、101、102,最终输出对应三个列的统计值为2、1、1,若确实需要统计ID=103的数量,在下方代码中补充对应分支即可。
正确SQL语句
SELECT SUM(CASE WHEN ID = '100' THEN 1 ELSE 0 END) AS `100`, SUM(CASE WHEN ID = '101' THEN 1 ELSE 0 END) AS `101`, SUM(CASE WHEN ID = '102' THEN 1 ELSE 0 END) AS `102` FROM t1;
原代码问题说明
- 缺失ID=100的统计分支,无法得到对应列的统计结果
- 错误将CASE判断字段放到GROUP BY中,会导致统计结果按不同CASE值拆分多行,不符合单行输出的需求
- 最后一个CASE判断和GROUP BY条件重复编写了ID=102的逻辑,漏了对应103的判断规则
内容的提问来源于stack exchange,提问作者Dikshit Karki
相关产品推荐
相关产品推荐

