SELECT
A.username,
SUM(CASE WHEN B.flag = 'colA' THEN 1 ELSE 0 END) AS count_A,
SUM(CASE WHEN B.flag = 'colB' THEN 1 ELSE 0 END) AS count_B,
SUM(CASE WHEN B.flag = 'colC' THEN 1 ELSE 0 END) AS count_C,
SUM(CASE WHEN B.flag = 'colD' THEN 1 ELSE 0 END) AS count_D,
SUM(CASE WHEN B.flag = 'colE' THEN 1 ELSE 0 END) AS count_E
FROM @tb1 AS A
LEFT JOIN (
SELECT colA AS name,'colA' AS flag FROM @tb2 WHERE colA IS NOT NULL
UNION ALL
SELECT colB,'colB' FROM @tb2 WHERE colB IS NOT NULL
UNION ALL
SELECT colC,'colC' FROM @tb2 WHERE colC IS NOT NULL
UNION ALL
SELECT colD,'colD' FROM @tb2 WHERE colD IS NOT NULL
UNION ALL
SELECT colE,'colE' FROM @tb2 WHERE colE IS NOT NULL
) AS B
ON A.username = B.name
GROUP BY A.username;
有2个表
表A
username
--------
刘丽娜
刘更胜
王英
吴洪波
王玉江
薛静
王前进
武文明
胡家和
表B
colA colB colC coLD colE
-----------------------------------------
苏凤林 李拥军 NULL 刘丽娜 靳文礼
王英 李拥军 宋建刚 NULL 刘更胜
任小东 李拥军 NULL NULL 刘丽娜
姚玉刚 NULL 姚玉刚 宋建刚 姚玉刚
宋建刚 NULL NULL 靳文礼 任小东
姚玉刚 NULL 任小东 NULL 刘丽娜
NULL NULL 任小东 姚玉刚 刘丽娜
NULL NULL NULL NULL 刘丽娜
NULL NULL 宋建刚 NULL 刘丽娜
靳文礼 NULL NULL 刘丽娜 刘丽娜
任小东 NULL NULL 宋建刚 靳文礼
刘丽娜 NULL 姚玉刚 NULL 宋建刚
NULL NULL NULL 姚玉刚 宋建刚
NULL NULL NULL NULL 宋建刚
NULL NULL 任小东 NULL 靳文礼
刘丽娜 NULL NULL 宋建刚 靳文礼
NULL NULL 任小东 NULL
最后想要的结果是
username countA countB countC countD countE
---------------------------------------------
刘丽娜 0 11 22 0 15
刘更胜 10 11 22 0 45
王英 30 11 12 0 22
任小东 0 0 0 0 17
.... ... ... ... ... ...
本文介绍了一个复杂的SQL查询案例,展示了如何使用多个CASE WHEN语句及UNION ALL来汇总不同条件下的记录数量,并通过LEFT JOIN连接两个表格以实现数据汇总。
4959

被折叠的 条评论
为什么被折叠?



