移调/动态 PIVOT

Transpose / Dynamic PIVOT

进入以下内容:

学分限制为6。空白点可以为空。我想创建名为 Credit1、Credit2、..、Credit6 的新列。我可以在这种情况下使用 PIVOT 吗?或者任何其他转置 table 的简单方法?

您可以使用动态 SQL 版本:

CREATE TABLE  #SampleData 
(
   Name varchar(50),
   Credits int
)

INSERT INTO #SampleData
VALUES ('John', 10),('John', 20),
('Bath', 90), ('Bath', 60), ('Bath', 70),('Bath', 80),('Bath', 50),
('Richard', 75)

DECLARE @ColPivot nvarchar(max)
;WITH temp AS
(
   SELECT * , 'Credit' + CAST(row_number() OVER(PARTITION BY sd.Name ORDER BY (SELECT 1)) AS varchar(5)) AS CreditGroup
   FROM #SampleData sd
)
SELECT @ColPivot = STUFF(
                    (SELECT DISTINCT ',' + t.CreditGroup FROM temp t FOR XML PATH (''))
                   ,1,1,'')

DECLARE @query nvarchar(max) = 
      N';WITH temp AS
        (
            SELECT * , ''Credit'' + CAST(row_number() OVER(PARTITION BY sd.Name ORDER BY (SELECT 1)) AS varchar(5)) AS CreditGroup
            FROM #SampleData sd
        )
         Select [Name],  ' + @ColPivot + 
        ' FROM 
         (
            SELECT [Name], Credits, CreditGroup FROM temp 
         ) src
         PIVOT
         (
            MAX(Credits) FOR CreditGroup IN ('+ @ColPivot+ ')
         )pvt
        '
PRINT @query

EXEC (@query)

DROP TABLE #SampleData

演示 link:Rextester