COUNT&PRINT匹配新列中的行值

时间:2019-01-28 06:46:15

标签: sql pivot

我试图从行值中获取列名,并计算每个行名的总值以显示为特定的列名。结果将从30天开始显示。

SELECT id
, Name
, Designation 
, DeptName
, Sts
, COUNT(Sts) as 'COUNT'
FROM table
WHERE Date >= DATEADD(month,-1,GETDATE())
AND Name = 'Neo'
GROUP BY id, Name, Designation, DeptName, Sts
ORDER id

这是我的输出

必需的输出是...

2 个答案:

答案 0 :(得分:0)

使用条件聚合

    SELECT id
    , Name
    , Designation 
    , DeptName        
    , sum (case when Sts='H' then 1 end) H
,sum (case when Sts='A' then 1 end) A
,sum (case when Sts='P' then 1 end)  P
    FROM table
    WHERE Date >= DATEADD(month,-1,GETDATE())
    AND Name = 'Neo'
    GROUP BY id, Name, Designation, DeptName
    ORDER id

CASE语句通过条件并在满足第一个条件时返回值(如IF-THEN-ELSE语句),当条件满足时将针对该特定值求和

答案 1 :(得分:0)

正如伯爵建议的那样,使用数据透视

WITH temp AS(
SELECT 1 AS id,'Neo' AS name,'Zonal Manager' AS designation, 'Admin' AS deptname, 'H' AS sts ,2 AS cnt FROM dual UNION ALL
SELECT 1,'Neo','Zonal Manager', 'Admin', 'A',3 FROM dual UNION ALL
SELECT 1,'Neo','Zonal Manager', 'Admin', 'P',4 FROM dual UNION ALL
SELECT 1,'Neo','Zonal Manager', 'Admin', 'A',1 FROM dual UNION ALL
SELECT 1,'Neo','Zonal Manager', 'Admin', 'A',8 FROM dual )
SELECT p.*
FROM   temp
PIVOT(
       SUM(cnt)
       FOR sts 
       IN  ('A', 'P', 'H')
     ) p
相关问题