移调或UNPIVOT每隔一列(Transpose or unpivot every other co

2019-08-03 06:16发布

基本上,我试图做的是转每隔一列的排在它旁边下面列的数据。

源只能有两列达一千以及数百万行的。 我只是在做这在每行的基础。 我试图做一个“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的经验。 如果需要了解更多信息,请让我知道。

Answer 1:

如果您使用的是SQL Server 2008中,我想你应该考虑使用CROSS应用(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);

这里有一个可运行的例子: http://sqlfiddle.com/#!3/9a9d2/5/0



文章来源: Transpose or unpivot every other column
标签: sql tsql unpivot