我正在尝试取消透视表中的几列。这是一个报告工具。源数据已经标准化。我可以通过一系列 UNION ALL 语句获得我想要的结果。我可以使用 UNPIVOT 接近我想要的,但我缺少一部分。我想在我的 UNPIVOT 结果中获取源列名称。
Table structure: | itemNumber | type | code | description |
| BN3466774 | AUD1 | 444 | desc--text |
| 1238udd74 | AUD1 | 331 | fdsafdsafdsa |
| AA34fg774 | MAN3 | 874 | asdfasdfasdf |
Desired Output: | itemNumber | SourceName | SourceValue |
| BN3466774 | type | AUD1 |
| BN3466774 | code | 444 |
| BN3466774 | description| desc--text |
| 1238udd74 | type | AUD1 |
| 1238udd74 | code | 331 |
| 1238udd74 | description| fdsafdsafdsa|
... you get the idea
如前所述,我可以使用一系列 UNION ALL 语句得到这个结果
SELECT *
FROM
(
SELECT itemNumber, 'type' as SourceName, type as SourceValue FROM myTable
UNION ALL
SELECT itemNumber, 'code ' as SourceName, code as SourceValue FROM myTable
UNION ALL
SELECT itemNumber, 'description ' as SourceName, description as SourceValue FROM myTable
) as myValues
我使用 UNPIVOT 的查询如下所示:
SELECT itemNumber, Value
FROM
(
SELECT itemNumber, type, code, description
FROM myTable
) AS tb
UNPIVOT
(
Value FOR attributes IN ( type, code, description)
) AS myValues
此查询产生以下数据:
Desired Output: | itemNumber | SourceValue |
| BN3466774 | AUD1 |
| BN3466774 | 444 |
| BN3466774 | desc--text |
| 1238udd74 | AUD1 |
| 1238udd74 | 331 |
| 1238udd74 | fdsafdsafdsa|
我想使用 UNPIVOT 的原因是因为它的执行速度往往比 UNION ALL 方法快 50%,并且在一个查询中,我返回了大约 1600 万行。
我想将源列放入我的 UNPIVOT 结果中,但我无法生成执行此操作的查询。
您缺少通过取消透视生成的新列
attributes