【问题标题】:SQL to transpose dataSQL转置数据
【发布时间】:2025-11-22 05:05:02
【问题描述】:

我有一个名为 Forecast 的表,如下所示:

Product_BK 有大约 80,000 条记录,而 Month 有 12 条。States 保持不变,为 5。

如何编写查询以将数据转置为如下所示:

这是在 SQL 服务器上,不希望沿着动态查询路线走。

感谢您的所有意见

【问题讨论】:

  • 这在我看来就像您想要unpivot 原始表。您使用的是什么数据库(例如 MySQL、Oracle 等)。这在 Oracle 或 SQL Server 中相对容易,但在 MySQL 中更难。
  • 感谢蒂姆的快速响应,这是在 MS SQL 服务器上

标签: sql-server pivot


【解决方案1】:

可以使用SQL Server内置的UNPIVOT函数:

SELECT PRODUCT_BK, Month, State, Forecast
FROM
(SELECT * FROM Forecast_Table) t
UNPIVOT
(Forecast FOR State IN (SA_NT, QLD, VIC_TAS, WA, NSW_ACT)) AS fcst

【讨论】:

  • 它就像魔术一样!你是绝对的明星。再次感谢您的快速回复。
  • 已经做了,但我没有足够的布朗尼积分来显示:)
  • 基于建议查询的另外两个问题:如何将默认状态(例如:QLD 到 Quensland)重命名为查询的输出?如何将各州的预测汇总到更高级别(例如:国家)?谢谢
  • 您可以为状态设置别名,也可以聚合状态。您应该提出一个新问题。
  • 新问题已打开...谢谢