使用t sql转动数据

时间:2013-11-22 19:15:38

标签: sql-server tsql

我非常感谢我遇到一些问题的帮助。 以下是数据示例:

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中的值。

我希望这是有道理的。提前谢谢。

2 个答案:

答案 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