Sql 如何在多个列上使用count distinct?
输入: 期望输出:Sql 如何在多个列上使用count distinct?,sql,Sql,输入: 期望输出: id sem1 sem2 sem3 sem4 sem5 sem6 sem7 1 S O S R null null null 2 O O R R S null null 如果您的数据库支持APPLY/UNPIVOT运算符,则使用此 交叉应用方法 id O R S 1 1 1 2 2 2 2 1 SELECT id, SUM(CASE WHEN val = 'O' THEN
id sem1 sem2 sem3 sem4 sem5 sem6 sem7
1 S O S R null null null
2 O O R R S null null
如果您的数据库支持
APPLY/UNPIVOT
运算符,则使用此
交叉应用
方法
id O R S
1 1 1 2
2 2 2 1
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
方法
id O R S
1 1 1 2
2 2 2 1
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
我个人更喜欢
CROSS-APPLY
方法,而不是UNPIVOT
,因为它更具可读性。在性能方面,两者都是相同的如果您的数据库支持APPLY/UNPIVOT
运算符,则使用此
交叉应用
方法
id O R S
1 1 1 2
2 2 2 1
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
方法
id O R S
1 1 1 2
2 2 2 1
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
我个人更喜欢
CROSS-APPLY
方法,而不是UNPIVOT
,因为它更具可读性。在性能方面,这两种方法都是相同的您可以使用“case-when”条件,即您正在使用的DBMS
您可以使用“case-when”条件,即您正在使用的DBMS