SQL Server中列转行的深度指南
当处理包含大量指标列的表时,将这些列转换为行对于分析和报告目的非常有利。此转换涉及重新构建数据以创建具有不同架构的新表。
问题陈述
考虑以下表架构:
[ID] [EntityID] [Indicator1] [Indicator2] [Indicator3] ... [Indicator150]
目标是将这些指标列转换为行,从而创建一个具有以下架构的新表:
[ID] [EntityId] [IndicatorName] [IndicatorValue]
使用UNPIVOT的解决方案
完成此任务的一种优雅解决方案是利用UNPIVOT函数。UNPIVOT的语法如下:
UNPIVOT ([unpivot column] FOR [pivot column] IN ([pivot values]))
在本例中,unpivot列表示指标值(例如,“Indicator1”、“Indicator2”等),而pivot列表示列名本身。以下查询说明了如何使用UNPIVOT:
select id, entityId,
indicatorname,
indicatorvalue
from yourtable
unpivot
(
indicatorvalue
for indicatorname in (Indicator1, Indicator2, Indicator3)
) unpiv;
通过执行此查询,指标列将转换为行,指标名称和值将填充新列。
替代方案
除了UNPIVOT之外,还有其他方法可以将列转换为行:
解决方案的选择取决于具体的需要和使用的SQL Server版本。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3