[英]How to pivot table rows into columns with dynamic name
I'm having a very tough time trying to figure out how to do 我在尝试解决方法上遇到了困难
CID sUSER VALUE
------------------
001 235 10
001 188 20
001 04 5
002 235 11
002 188 12
002 04 13
I would like it displayed as follows 我希望它显示如下
CID 04 188 235
-------------------
001 5 20 10
002 13 12 11
Can someone please show me the Sql code please ? 有人可以告诉我Sql代码吗?
Lets Assume you have filtered data in #tmpCID; 假设您已过滤#tmpCID中的数据; now try below script
现在尝试下面的脚本
Declare @sUser As Varchar(Max)
SELECT @sUser= Case isNull(@sUser,'')
When '' then '['+ Rtrim(sUser) + ']'
Else COALESCE(@sUser + ',[', ',') + Rtrim(sUser)+ ']'
End
FROM (SELECT DISTINCT sUser FROM #tmpCID) U
Declare @Query As Varchar(Max)
Set @Query='Select CID, ' + @sUser + ' From #tmpCID
Pivot (AVG(Value)
For sUser IN ('+ @sUser + ')) As P'
EXEC (@Query)
Try this: 尝试这个:
CREATE PROCEDURE YourProcedureName
as
Begin
DECLARE @sUSER AS NVARCHAR(MAX);
DECLARE @query AS NVARCHAR(MAX);
select @sUSER = STUFF((SELECT distinct ',' + QUOTENAME(sUSER) FROM testPIVOT
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '');
SELECT @query = 'WITH PivotData AS
(
SELECT CID, sUSER, VALUE
FROM dbo.YourTableName
)
SELECT CID, '+ @sUSER +'
FROM PivotData
PIVOT(max(VALUE) FOR sUSER IN('+ @sUSER +')) AS P;';
execute(@query);
End
Hope it could help you! 希望它能对您有所帮助!
Thanks. 谢谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.