基本上,我想做的是将每隔一列转置为一行,并在其旁边添加以下列数据。
源最多只能有两列,最多一千行。我仅按行执行此操作。我尝试做一个“ 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有一定的经验,所以有人可以提供帮助。如果需要更多信息,请告诉我。
如果您使用的是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);