我正在处理一个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。
答案 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');