多行变成可变列数

时间:2019-04-15 07:41:31

标签: sql sql-server sql-server-2016

我正在处理一个SQL问题,其中有可变数量的行,需要将其对应的值放入列中。

输入表:

id | value
----------
1  | a
1  | b
2  | c
3  | d
3  | e
3  | f

预期的输出表:


id | value1 | value2 | value3 | value4 
--------------------------------------
1  | a      | b      | null   | null 
2  | c      | null   | null   | null 
3  | d      | e      | f      | null 

旁注:value列是输入表的主键。输出列的最大数量应固定为4。

1 个答案:

答案 0 :(得分:1)

您可以为此使用SQL Pivot技术。试试这个查询。

SELECT *
FROM   (SELECT *, Row_number() OVER (partition BY id ORDER BY id) AS rn
        FROM   Input) src
       PIVOT ( Max([value])
             FOR rn IN ([1],[2],[3],[4]) ) piv;  

结果

+----+---+------+------+------+
| id | 1 |  2   |  3   |  4   |
+----+---+------+------+------+
|  1 | a | b    | NULL | NULL |
|  2 | c | NULL | NULL | NULL |
|  3 | d | e    | f    | NULL |
+----+---+------+------+------+

表架构和数据

CREATE TABLE Input
  (
     id    INT,
     [value] NVARCHAR(10)
  );

INSERT INTO Input
VALUES      (1, 'a'),
            (1, 'b'),
            (2, 'c'),
            (3, 'd'),
            (3, 'e'),
            (3, 'f');