简体   繁体   English

如何将表行旋转为具有动态名称的列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM