2017-04-21 73 views
0

enter image description here移調/動態PIVOT

爲以下:

enter image description here

信用與6.空白點限定可以爲空。我想創建名爲Credit1,Credit2,..,Credit6的新列。我可以在這種情況下使用PIVOT嗎?或者任何其他簡單的方法來轉置表?

+2

標籤您正在使用的數據庫管理系統。 (答案可能是產品特定的。)並注意,這裏的大多數人都想要格式化文本而不是圖像。 – jarlh

+0

DB是SQL Server。對不起,我使用的格式 –

+0

它總是6學分? –

回答

1

你可以使用動態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 

演示鏈接:Rextester

+0

我懶得寫動態版+1 –

+0

謝謝你的回答 –