SQL将结果从宽旋转到垂直

时间:2019-03-18 19:18:05

标签: sql sql-server

我希望获得一些最佳方法来捕获某些列数据并将其旋转,以便将列名和数值存储在临时表中。

结果是一行,显示了此处列出的列的值:

AccountingCode ActiveCostAllocationCode1Segment1 ActiveCostAllocationCode1Segment1Description
-------------- --------------------------------- --------------------------------------------
    0              71                                264                                         

我想进行上述查询并旋转输出以使其看起来更垂直。

ColName                                          Value
--------------------------------------------- ---------
AccountingCode                                      0
ActiveCostAllocationCode1Segment1                  71
ActiveCostAllocationCode1Segment1Description      264

我试图使用PIVOT / UNPIVOT,但无法弄清楚如何使其适用于这种情况。

有什么想法吗?

2 个答案:

答案 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 ALLUNPIVOT数据。

答案 1 :(得分:0)

SQL中的通用方式是UNION ALL

select 'AccountingCode', AccountingCode from t
union all
select 'ActiveCostAllocationCode1Segment1', ActiveCostAllocationCode1Segment1 from t
union all
select 'ActiveCostAllocationCode1Segment1Description', ActiveCostAllocationCode1Segment1Description

这假定列的类型是兼容的(它们看起来都像整数,所以可能没关系)。

更好的方法是,如果您的数据库支持横向联接(在某些数据库中为apply)。