2014-11-25 38 views
-1

假設我有:摺疊多行值到生成的列單排

DECLARE @t TABLE (
     x INT, 
     y NVARCHAR(30) 
) 
INSERT INTO @t (x, y) VALUES (1, 'a'), (2, 'b'), (3, 'c') 

查詢該表,我希望得到這個結果集:

 
c1 c2 c3 
---- ---- ---- 
a b c 

我知道提前值爲x;也就是說,我知道我希望yx = 1c1,我希望yx = 2c2等行,所以我可以硬編碼這些關係。

如何獲得單行,而不使用遊標或循環?

+0

x的值是否有限?你看過「PIVOT」條款嗎? – 2014-11-25 14:46:21

+0

@srutzky:*「x的值是否有限?」*是的,我會再次提前知道它們(例如上面的1,2和3)*「您是否看過PIVOT子句? 「*否 – 2014-11-25 14:55:48

+0

好的。我看到@Tab確實提到了PIVOT。它可以更好地將有限值轉換爲列。它有其優點和缺點;-)。 – 2014-11-25 15:07:35

回答

1

你可以看看玩Pivot聲明,但我不確定你會得到你究竟是什麼。但是,這也將起作用:

SELECT 
    MAX(CASE x WHEN 1 THEN y END) AS c1, 
    MAX(CASE x WHEN 2 THEN y END) AS c2, 
    MAX(CASE x WHEN 3 THEN y END) AS c3 
FROM @t