如何在SQL中将行值作为列?

时间:2016-05-20 15:59:38

标签: sql sql-server group-by

我有一个包含两列的表格。

Id  Value
1    A
1    B
1    C

我想得到如下结果,

Id   Value1  Value2  value3
1      A       B       C

我如何在SQL Server中完成此操作。

1 个答案:

答案 0 :(得分:1)

这是一个支点,但您没有用于旋转的列。 row_number()可以提供。我通常会使用条件聚合。

select id,
       max(case when seqnum = 1 then value end) as value1,
       max(case when seqnum = 2 then value end) as value2,
       max(case when seqnum = 3 then value end) as value3
from (select t.*,
             row_number() over (partition by id order by (select null)) as seqnum
      from t
     ) t
group by id;

请注意,SQL表表示无序集。因此,没有关于排序的信息,值可以按任何顺序排列。如果列确实指定了排序,请将其包含在order by而不是select null中。