【问题标题】:SQL server how to convert column values into rowsSQL server 如何将列值转换为行
【发布时间】:2016-01-28 08:26:24
【问题描述】:

我会尽力解释我的问题。

我的表结构:

name Code_1 Code_1_value Code_2 Code_2_value Code_3 Code_3_value
N1    ABC1        10      ABC2       15       ABC3        6
N2    ABC1        3       NULL      NULL      BAA1        10
N3    ABC4        5       ABC2       11       ADC3        6

我想将此值转换为新格式:

name    code    value
N1      ABC1      10
N1      ABC2      15
N1      ABC3      6
N2      ABC1      3

我不知道逻辑上应该如何(枢轴?)

【问题讨论】:

    标签: sql sql-server database tsql unpivot


    【解决方案1】:

    查询-

    DECLARE @t TABLE (
        name VARCHAR(50) PRIMARY KEY,
        Code_1 VARCHAR(50),
        Code_1_value INT,
        Code_2 VARCHAR(50),
        Code_2_value INT,
        Code_3 VARCHAR(50),
        Code_3_value INT
    )
    INSERT INTO @t
    VALUES
        ('N1', 'ABC1', 10, 'ABC2', 15  , 'ABC3', 6),
        ('N2', 'ABC1', 3 , NULL,   NULL, 'BAA1', 10),
        ('N3', 'ABC4', 5 , 'ABC2', 11  , 'ADC3', 6)
    
    SELECT name, code, value
    FROM @t
    CROSS APPLY (
        VALUES (Code_1, Code_1_value), (Code_2, Code_2_value),  (Code_3, Code_3_value)
    ) t2 (code, value)
    WHERE code IS NOT NULL
    

    输出 -

    name     code     value
    -------- -------- -----------
    N1       ABC1     10
    N1       ABC2     15
    N1       ABC3     6
    N2       ABC1     3
    N2       BAA1     10
    N3       ABC4     5
    N3       ABC2     11
    N3       ADC3     6
    

    关于UNPIVOT的帖子 -

    http://blog.devart.com/is-unpivot-the-best-way-for-converting-columns-into-rows.html

    【讨论】:

    • 如果这个答案对你有帮助,你可能想accept它。这有助于其他追随您的人,并奖励 Devart 的努力。
    【解决方案2】:

    这也可以用 UNION 来完成

    SELECT name,code_1 as code,code_1_value as value from yourTable
    UNION ALL
    SELECT name,code_2 as code,code_2_value as value from yourTable
    UNION ALL    
    SELECT name,code_3 as code,code_3_value as value from yourTable
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-16
      • 1970-01-01
      • 2015-12-04
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-30
      相关资源
      最近更新 更多