这是一个与 T-SQL 相关的问题。我正在使用 SQL Server 2012。
我有一个这样的表:
我想要这样的输出:
解释:
对于每个员工,都会有一行。一名员工有一项或多项任务。批次 ID 指定了这一点。根据批次 ID,列名称将会更改(例如国家/地区 1、国家/地区 2 等)。
到目前为止的方法:
取消透视源表,如下所示:
select
EmpId, 'Country ' + cast(BatchId as varchar) as [ColumnName],
Country as [ColumnValue]
from
SourceTable
UNION
select
EmpId, 'Pass ' + cast(BatchId as varchar) as [ColumnName],
Pass as [ColumnValue]
from
SourceTable
它将每列的值作为行给出。然后,可以对该结果进行旋转以获得所需的输出。
问题:
- 有更好的方法吗?
- 目前,我知道批次数量是固定的,但是,对于未来,如果我想使旋转部分动态化,最好的方法是什么?
- 使用 SSIS 或 SSRS 等工具,动态处理枢轴是否更容易?
螺丝用 SQL 来做。
让 SSRS 为您完成工作MATRIX。它将为您进行 PIVOT,而无需创建动态 SQL 来处理需要了解所有列的可怕限制。
对于您的数据,您将使用 EMP ID 作为 ROW Group,将 PASS 作为列分组。
https://msdn.microsoft.com/en-us/library/dd207149.aspx https://msdn.microsoft.com/en-us/library/dd207149.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)