【问题标题】:Multiple rows into variable number of columns [duplicate]多行到可变数量的列[重复]
【发布时间】:2019-09-05 03:51:56
【问题描述】:

我正在处理一个 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 

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

【问题讨论】:

  • 您使用的是哪个 dbms? (前两个 cmets 假设 MS SQL Server。)
  • @jarlh MS SQL 服务器 2016。
  • 这可能是我在 GUI 层(即您的应用程序或网站)中要做的事情。这应该是一个相当简单的循环。

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


【解决方案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');  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-23
    • 2019-10-11
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 2012-08-29
    相关资源
    最近更新 更多