日期:2014-05-17  浏览次数:20350 次

请问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