小编典典

转置或取消每隔一列的显示

sql

基本上,我想做的是将每隔一列转置为一行,并在其旁边添加以下列数据。

源最多只能有两列,最多一千行。我仅按行执行此操作。我尝试做一个“ UNION ALL”,但是在处理一个大表中的数百个列时,这非常慢。

可能的解决方案是使用UNPIVOT,尽管我能找到的每个示例都在做与我想要的不同的事情。

示例:查询之前

Columns...
Apple | Apple Data | Banana | Banana  Data | Cranberry | Cranberry  Data | ....

Data Returned... 
IOWA_PL_RLA | 1 | IOWA_PL_MATH | 1 | IOWA_SS_RLA 684 .....

示例:查询后

MeasureID  Score
CRCT_PL_RLA   | 1 
CRCT_PL_MATH  | 1 
CRCT_SS_RLA   |684 
.....

希望我已经对自己进行了足够的解释,因为只有我对T-SQL有一定的经验,所以有人可以提供帮助。如果需要更多信息,请告诉我。


阅读 215

收藏
2021-04-14

共1个答案

小编典典

如果您使用的是SQL Server 2008,我认为您应该研究使用CROSS APPLY(VALUES)技术:

http://www.sqlservercentral.com/articles/CROSS+APPLY+VALUES+UNPIVOT/91234/

基本上,它是这样的:

SELECT
  x.NewColumn1,
  x.NewColumn2
FROM YourTable t
CROSS APPLY (
    VALUES
        (t.OldColumn1, t.OldColumn2),
        (t.OldColumn3, t.OldColumn4),
        ...
) x (NewColumn1, NewColumn2);
2021-04-14