代码之家  ›  专栏  ›  技术社区  ›  DineshDB

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

  •  -2
  • DineshDB  · 技术社区  · 8 年前

    我有一个有两列的表Test。

    Id  Value
    1    A
    1    B
    1    C
    

    我想得到如下结果,

    Id   Value1  Value2  value3
    1      A       B       C
    

    如何在SQL Server中做到这一点。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Gordon Linoff    8 年前

    这是一个枢轴,但没有用于枢轴的列。 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 .