当前位置: 代码迷 >> Sql Server >> 请教PIVOT 转表
  详细解决方案

请教PIVOT 转表

热度:62   发布时间:2016-04-24 21:17:34.0
请问PIVOT 转表
unitid  applynum   state
62361 1 1
62361 1 1
62361 1 2
62361 1 0
62361 1 3


执行这个查询  为什么结果没有合并?
SELECT UnitiD,[0] 未审核,[1] 已通过,[2] 未通过 
FROM FormationApply f 
PIVOT(SUM(f.ApplyNum) FOR f.State IN ([0],[1],[2])) AS pvt
 ORDER BY unitid


结果是
unitid  未审核  已通过  未通过
62361 NULL 1 NULL
62361 NULL 1 NULL
62361 NULL NULL 1
62361 1 NULL NULL
62361 NULL NULL NULL

------解决方案--------------------
declare @test table (unitid int,applynum int,state int)

INSERT INTO @TEST VALUES (62361,1,1),(62361,1,1),(62361,1,2),(62361,1,0),(62361,1,3)

SELECT unitid,
SUM(CASE WHEN state = 0 THEN applynum ELSE 0 END)  AS 未审核,
SUM(CASE WHEN state = 1 THEN applynum ELSE 0 END)  AS 已通过,
SUM(CASE WHEN state = 2 THEN applynum ELSE 0 END)  AS 未通过
FROM @TEST 
GROUP BY unitid

------解决方案--------------------

select UnitiD,
       [0] 未审核,
       [1] 已通过,
       [2] 未通过
 from (select unitid,applynum,[state] from FormationApply) f
 pivot(count(ApplyNum) FOR [State] IN ([0],[1],[2])) AS pvt
 order by unitid
  相关解决方案