簡體   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