我希望获得一些最佳方法来捕获某些列数据并将其旋转,以便将列名和数值存储在临时表中。
结果是一行,显示了此处列出的列的值:
AccountingCode ActiveCostAllocationCode1Segment1 ActiveCostAllocationCode1Segment1Description
-------------- --------------------------------- --------------------------------------------
0 71 264
我想进行上述查询并旋转输出以使其看起来更垂直。
ColName Value
--------------------------------------------- ---------
AccountingCode 0
ActiveCostAllocationCode1Segment1 71
ActiveCostAllocationCode1Segment1Description 264
我试图使用PIVOT / UNPIVOT,但无法弄清楚如何使其适用于这种情况。
有什么想法吗?
答案 0 :(得分:1)
如果您正在使用SQL Sever
,则可以使用APPLY
:
SELECT tt.ColName, tt.val
FROM table t CROSS APPLY
( VALUES ('AccountingCode', AccountingCode),
('ActiveCostAllocationCode1Segment1', ActiveCostAllocationCode1Segment1),
('ActiveCostAllocationCode1Segment1Description', ActiveCostAllocationCode1Segment1Description)
) tt(ColName, Val);
在标准情况下,您可以使用UNION ALL
来UNPIVOT
数据。
答案 1 :(得分:0)
SQL中的通用方式是UNION ALL
:
select 'AccountingCode', AccountingCode from t
union all
select 'ActiveCostAllocationCode1Segment1', ActiveCostAllocationCode1Segment1 from t
union all
select 'ActiveCostAllocationCode1Segment1Description', ActiveCostAllocationCode1Segment1Description
这假定列的类型是兼容的(它们看起来都像整数,所以可能没关系)。
更好的方法是,如果您的数据库支持横向联接(在某些数据库中为apply
)。