繁体   English   中英

如何沿多个列使用不同的计数?

[英]How to use count distinct along multiple columns?

输入:

id sem1 sem2 sem3 sem4 sem5 sem6 sem7
1    S   O     S    R  null null null
2    O   O     R    R    S  null null

所需输出:

id O   R   S
1  1   1   2
2  2   2   1

如果您的数据库支持APPLY/UNPIVOT符,则使用此

CROSS APPLY方法

SELECT id, 
       SUM(CASE WHEN val = 'O' THEN 1 ELSE 0 END) O, 
       SUM(CASE WHEN val = 'R' THEN 1 ELSE 0 END) R, 
       SUM(CASE WHEN val = 'S' THEN 1 ELSE 0 END) S 
FROM   mytable 
       CROSS apply (VALUES (sem1), 
                           (sem2), 
                           (sem3), 
                           (sem4), 
                           (sem5), 
                           (sem6), 
                           (sem7)) cs(val) 
GROUP  BY id 

UNPIVOT方法

SELECT id, 
       SUM(CASE WHEN val = 'O' THEN 1 ELSE 0 END) O, 
       SUM(CASE WHEN val = 'R' THEN 1 ELSE 0 END) R, 
       SUM(CASE WHEN val = 'S' THEN 1 ELSE 0 END) S 
FROM   (SELECT * 
        FROM   mytable) a 
       UNPIVOT (val 
               FOR col IN ( sem1, 
                            sem2, 
                            sem3, 
                            sem4, 
                            sem5, 
                            sem6, 
                            sem7 )) upv 
GROUP  BY id 

我个人更喜欢CROSS APPLY方法而不是UNPIVOT因为它更具可读性。 明智的表现将是相同的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM