2014-10-27 122 views
0

我有一個查詢,其結果集看起來像下表。
名稱列有這是衆所周知的沒有聚合的SQL SERVER樞軸

Id | Name | Value 
------------------------------- 
1 | C1 | 1C1 
1 | C2 | 1C2 
1 | C3 | 1C3 
2 | C1 | 2C1 
2 | C2 | 2C2 
2 | C3 | 2C3 

我需要把它轉以下

Id | C1 | C2 | C3 
------------------------------- 
1 | 1C1 | 1C2 | 1C3 
2 | 2C2 | 2C2 | 2C3 
一個「C1,C2,C3」集

試圖與支點,但他們不來實現它對於字符串值(即非集合)看起來似乎不錯。 任何關於如何去做這件事的指針?

+3

'MAX()'是一個總能與字符串的工作,有沒有點在提供時,開發商碰巧知道,每個聚集只會收到一個特殊的設施行的價值。 – 2014-10-27 15:04:30

回答

1

此代碼是相當多從SQL Server文檔中的樣品取出;子查詢在這裏並不是真的需要,但這就是它在樣本中的寫法。

SELECT * FROM (
    SELECT Id, Name, Value 
    FROM your_table_or_query 
    ) AS p 
PIVOT 
    (MAX(value) 
    FOR Name IN 
     (C1,C2,C3) 
) AS pvt 
ORDER BY ID; 

輸出:

Id C1 C2 C3 
1 1C1 1C2 1C3 
2 2C1 2C2 2C3 
1

類似下面應該做的伎倆:

DECLARE @source TABLE (ID INT NOT NULL, 
         [Name] VARCHAR(20) NOT NULL, 
         [Value] VARCHAR(20) NOT NULL); 

INSERT INTO @source (ID, Name, Value) 
VALUES (1,'C1','1C1'), 
     (1,'C2','1C2'), 
     (1,'C3','1C3'), 
     (2,'C1','2C1'), 
     (2,'C2','2C2'), 
     (2,'C3','2C3'); 

SELECT ID, [C1], [C2], [C3] 
FROM @source 
PIVOT (MAX([Value]) FOR [Name] IN ([C1], [C2], [C3])) AS pivotTable;