假設你需要去DYNAMIC
Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName('Sum'+Serv+'(sc)')+','+QuoteName('Sum'+Serv+'(se)') From Yourtable Order by 1 For XML Path('')),1,1,'')
Select @SQL = '
Select [nm],[Mnth],' + @SQL + '
From (
Select [nm]
,[Mnth]
,C.*
From YourTable A
Cross Apply (Values (''Sum''+A.Serv+''(sc)'',A.sc)
,(''Sum''+A.Serv+''(se)'',A.se)
) C (Item,Value)
) A
Pivot (sum(Value) For [Item] in (' + @SQL + ')) p'
Exec(@SQL);
返回
![enter image description here](https://i.stack.imgur.com/y1rSM.jpg)
生成的SQL(如果您不需要動態)
Select [nm],[Mnth],[SumA(sc)],[SumA(se)],[SumF(sc)],[SumF(se)],[SumM(sc)],[SumM(se)]
From (
Select [nm]
,[Mnth]
,C.*
From YourTable A
Cross Apply (Values ('Sum'+A.Serv+'(sc)',A.sc)
,('Sum'+A.Serv+'(se)',A.se)
) C (Item,Value)
) A
Pivot (sum(Value) For [Item] in ([SumA(sc)],[SumA(se)],[SumF(sc)],[SumF(se)],[SumM(sc)],[SumM(se)])) p
謝謝!好的解決方案 –
@AndyL。很高興它有幫助 –