简体   繁体   English

SQL将单行拆分为固定的列数

[英]SQL Split Single Row into Fixed Number of Columns

We need to split a single row into fixed number of multiple columns. 我们需要将单行拆分为固定数量的多列。 Following is an example for the data set: 以下是数据集的示例:

  • 1 1
  • 2 2
  • 3 3
  • 4 4
  • 5
  • 6 6
  • 7 7

Desired Output: 所需输出:

Column A        Column B       Column C      Column D
1                  2              3              4
5                  6              7             NULL

Thanks for your help in advance. 感谢您的帮助。

SQL Server Solution: SQL Server解决方案:

Create Sample Table: 创建样品表:

create table mytable (col1 int)

insert into mytable values
(1),
(2),
(3),
(4),
(5),
(6),
(7);

Using Modulo and Row_Number() , you could easily do this: 使用ModuloRow_Number() ,您可以轻松地做到这一点:

Modulo Query: 模查询:

SELECT 
    R1.col1 as columnA,
    R2.col1 as columnB,
    R3.col1 as columnC,
    R4.col1 as columnD
FROM 
    (
        SELECT ROW_NUMBER() OVER (ORDER BY col1 ASC) AS RowNum, col1 
        FROM mytable 
        WHERE 
            col1 % 4 = 1
    ) AS R1
    FULL OUTER JOIN (
        SELECT ROW_NUMBER() OVER (ORDER BY col1 ASC) AS RowNum, col1 
        FROM mytable 
        WHERE 
            col1 % 4 = 2
    ) AS R2
    ON R1.RowNum = R2.RowNum
    FULL OUTER JOIN (
        SELECT ROW_NUMBER() OVER (ORDER BY col1 ASC) AS RowNum, col1 
        FROM mytable 
        WHERE 
            col1 % 4 = 3
   ) AS R3
    ON R2.RowNum = R3.RowNum
    FULL OUTER JOIN (
        SELECT ROW_NUMBER() OVER (ORDER BY col1 ASC) AS RowNum, col1 
        FROM mytable 
        WHERE 
            col1 % 4 = 0
   ) AS R4
    ON R4.RowNum = R3.RowNum

Result: 结果:

+---------+---------+---------+---------+
| columnA | columnB | columnC | columnD |
+---------+---------+---------+---------+
|       1 |       2 |       3 | 4       |
|       5 |       6 |       7 | (null)  |
+---------+---------+---------+---------+

SQL Fiddle Demo SQL小提琴演示

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM