在SQL中一起旋转多个列

时间:2019-09-05 12:55:23

标签: sql tsql pivot

我有这样的桌子

enter image description here

我需要得到这样的结果

RT       Team     PI     Committed   Done-Partial   Done-Full
----------------------------------------------------------------
ART1     Team1     10       5           1               3
ART2     Team2     7        5           4               1
-----------------------------------------------------------------------

我尝试的方法如下

;with RecentPI as(
select * from  (
select rt,Team,pi,[Finish Date],DENSE_RANK() over( partition by rt order by [Finish Date] desc) PIRank from Schedule_Manual S inner join TFS_ARTs_Teams T on T.ART=S.RT

group by RT,Team,PI,[Finish Date]
)tbl

 where PIRank=1
 )

 select * from (select  Obj.RT,Obj.[TFS Team], Obj.Type,Obj.PI,[PI Status] from Objectives Obj inner join RecentPI RP on RP.RT=Obj.RT and RP.Team=Obj.[TFS Team] and RP.PI=Obj.PI) as query 
 PIVOT (count(type) for [Type] in ([Committed])) p1
  PIVOT (Count([PI Status]) for [pi status] in ([Done-Partial],[Done-Full])) p2

但是它似乎并不正确,而且我在查询中没有获得完整的列。对不起,我是SQL Pivot的初学者

1 个答案:

答案 0 :(得分:1)

您可以使用此简单查询...您的问题将得到解决。...

select RT,Team,[PI],
 sum(case when [Type] = 'Committed' then 1 else 0 end) AS 'Committed',
  sum(case when PIStatus = 'Done-Partial' then 1 else 0 end) AS 'Done-Partial',
  sum(case when PIStatus = 'Done-Full' then 1 else 0 end) AS 'Done-Full'
from tbl_Pivot
group by RT,Team,[PI]

输出:-

enter image description here