我非常感谢我遇到一些问题的帮助。 以下是数据示例:
DEPT FLAG FLAG2 FLAG3
100 A 1
100 A B
201 A 1
201 1 3
300 Z
301 5
301 2 3 FG
我需要以下结果:( distinct dept,包含flag的总计数,以及包含值的flag2。)使用上面的数据,返回的结果应如下所示:
dept countFlag countFlag2 countFlag3
100 2 1 1
201 2 2 0
300 0 1 0
301 2 1 1
100 2,1,1< ---对于dept 100,有两行包含flag列中的值,1包含flag2中的值,1包含flag 3中的值。
我希望这是有道理的。提前谢谢。
答案 0 :(得分:4)
你不需要支点。 Count(Distinct)
就足够了
Select Dept,
Count(distinct Flag) as countFlag,
Count(distinct Flag2) as CountFlag2,
Count(distinct Flag3) as CountFlag3
from dept
group by Dept
要包含所有非空字段,请使用以下
Select Dept,
sum(case flag when null then 0 else 1) as countFlag,
sum(case flag2 when null then 0 else 1) as CountFlag2,
sum(case flag3 when null then 0 else 1) as CountFlag3
from dept
group by Dept
答案 1 :(得分:0)
测试数据
CREATE TABLE Table_Name (DEPT INT,
FLAG VARCHAR(2)
,FLAG2 VARCHAR(2),
FLAG3 VARCHAR(2))
INSERT INTO Table_Name(DEPT, FLAG, FLAG2, FLAG3)
VALUES
(100,'A',null,'1'),
(100,'A','B', null),
(201,'A','1', null),
(201,'1','3', null),
(300, null,'Z',null),
(301,'5',null,null),
(301,'2','3','FG')
<强>查询强>
SELECT DISTINCT DEPT, COUNT(FLAG) AS FLAG,
COUNT(FLAG2) AS FLAG2, COUNT(FLAG3) AS FLAG3
FROM Table_Name
GROUP BY DEPT
结果集
DEPT FLAG FLAG2 FLAG3
100 2 1 1
201 2 2 0
300 0 1 0
301 2 1 1