【问题标题】:SQL Server Table Transformation Query / Combine Column Names With ValuesSQL Server 表转换查询/将列名与值组合
【发布时间】:2015-11-04 23:16:58
【问题描述】:

这是我现有的 SQL 表,有 3 列(q1、q2、q3)和 2 行:

> q1 q2 q3
> --------
> 1  2  3
> 4  5  6

我需要一个 SQL 查询来转换该表并返回一个结果集,其中包含 2 个新列(cg、sg)和 6 个将表列名称与值组合在一起的行:

> cg  sg
> ======
> q1  1
> q1  4
> q2  2
> q2  5
> q3  3
> q3  6

也许这需要某种“PIVOT”操作,但经过多次尝试后我无法让它工作。

有什么建议或解决方案吗?谢谢。

PS 我不能使用存储过程,只能使用一个查询。

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    您可以使用 UNION 来做到这一点:

    SELECT 'q1' as cg, q1 as sg FROM t1
    UNION SELECT 'q2' as cg, q2 as sg FROM t1
    UNION SELECT 'q3' as cg, q3 as sg FROM t1
    

    【讨论】:

    • 优雅又聪明,非常感谢!对于真实数据集(我在测试时发现)的一个小注释是,您可以使用 UNION ALL 来获取所有值 - 而不仅仅是不同的值。
    • UNION ALL 也更快,因为它不需要构建和检查 DISTINCT 列表
    【解决方案2】:

    这是另一种只扫描表一次的方法。

    SELECT
       x.*
    FROM tbl t
    CROSS APPLY( VALUES
        ('q1', q1),
        ('q2', q2),
        ('q3', q3)
    ) x(cg, sg)
    

    【讨论】:

      猜你喜欢
      • 2020-09-29
      • 2015-11-29
      • 2016-07-29
      • 2020-03-06
      • 1970-01-01
      • 2020-12-18
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多