2014-09-25 54 views
0

如果我有一個表:如何分割組結果爲無限單獨列

id tstamp x y 
----------------- 
1 111  1 A 
2 111  2 B 
3 111  3 C 
4 222  1 D 
5 222  2 E 
6 222  3 F 
7 333  1 G 
8 333  2 H 
9 333  3 I 
... nnn  ... ... 

我怎樣才能將它分成以下,其中列數是依賴於一系列TSTAMP的?

x y111 y222 y333 ynnn 
---------------------------------- 
1 A  D  G  ... 
2 B  E  H  ... 
3 C  F  I  ... 

它似乎從根本上很簡單,但我找不到任何相關的示例或API?有10多個類似的問題,但他們都處理字符串處理,CSV,XML?我想在c#或其他腳本語言中做這件事很簡單,但我期望它在sql中應該是一件容易的事情?

+0

的答案你看到的可能是正確的。動態PIVOT是你正在尋找的東西,是的,它有點牽扯。 – SQLChao 2014-09-25 13:50:20

+0

谷歌SQL PIVOT – 2014-09-25 13:50:52

+0

謝謝,關鍵字樞軸... :) – 2014-09-25 14:14:11

回答

0

需要構建TSTAMP的列值PIVOT和使用動態查詢

DECLARE @cols NVARCHAR(MAX) 
SELECT @cols = STUFF((SELECT DISTINCT TOP 100 PERCENT 
           '],[' + tstamp 
         FROM Table1 
         ORDER BY '],[' + tstamp 
         FOR XML PATH('') 
        ), 1, 2, '') + ']' 


DECLARE @query NVARCHAR(4000) 
SET @query = N'SELECT x, '+ 
@cols +' 
FROM 
(SELECT x, y, tstamp 
FROM Table1 
) p 
PIVOT 
(
MAX(y) 
FOR tstamp IN 
('+ 
@cols +') 
) AS pvt 
' 

exec sp_executesql @query