将多行中的值折叠为一行生成的列

时间:2014-11-25 14:34:00

标签: sql-server tsql sql-server-2012

假设我有:

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的价值;也就是说,我知道我希望y行中的x = 1作为我的c1,我希望yx = 2c2 { {1}}等,所以我可以对这些关系进行硬编码。

如何在不使用游标或循环的情况下获得该单行?

1 个答案:

答案 0 :(得分: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