【问题标题】:Pivot in sql for multiple columns多列在sql中的透视
【发布时间】:2015-04-15 17:41:54
【问题描述】:

我有一张如下表:

使用pivot 我需要以下输出:

查询不应使用Union 集合运算符。

【问题讨论】:

  • 可能重复:stackoverflow.com/questions/20111418/… 您正在寻找从行 -> 列转置。
  • 我已经对单个 val1 和 val2 使用了 pivot 并合并了最终输出的结果。我检查了上面的链接“Evaldas Buinauskas”,但我需要我的列名在行中。即. val1 和 val2 成行。

标签: sql sql-server tsql pivot


【解决方案1】:

您可以先UNPIVOT 将数据转换为以下格式:

然后通过Type 列执行PIVOT

这是完整的工作示例:

DECLARE @DataSource TABLE
(
    [CatDes] CHAR(1)
   ,[val1] TINYINT
   ,[val2] TINYINT
);

INSERT INTO @DataSource ([CatDes], [val1], [val2])
VALUES ('a', 1 ,2)
      ,('b', 3 ,4)
      ,('c', 5 ,6)
      ,('d', 7 ,8);

SELECT *
FROM @DataSource
UNPIVOT
(
    [Value] FOR [Type] IN ([val1], [val2])
) UNPVT
PIVOT
(
    MAX([Value]) FOR [CatDes] IN ([a], [b], [c], [d])
) PVT

当然,当您使用PIVOTUNPIVOT 时,您应该对列值进行硬编码。我想,在你的实际情况下,这不是一个选项,所以我会建议你使用动态 T-SQL 语句 - 将语句构建为字符串,然后使用 sp_executesql 执行它。

【讨论】:

    猜你喜欢
    • 2015-10-29
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    相关资源
    最近更新 更多