【问题标题】:Transpose or unpivot every other column每隔一列转置或反透视
【发布时间】:2012-11-15 12:31:20
【问题描述】:

基本上我要做的是将每隔一列转换为一行,旁边有以下列数据。

源只能有两列,最多可达一千和几百万行。我只是在每行的基础上这样做。我尝试过执行“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 方面只有中等经验。如果需要更多信息,请告诉我。

【问题讨论】:

  • measureidapplebanana 等和value 是来自data 字段吗?带有data 的项目实际上是否命名为....Data
  • 希望我理解正确;是的。该数据实际上是学生评估数据。这是一个按原样加载到表中的大型平面文件。我们有一个度量,然后以下列是它的分数。 (原始分数、量表分数、表现水平等。(阅读、数学、科学等))
  • 在您的 ETL 中,您不能将表加载为单个描述/值表,而不是按原样作为交叉表吗?您能否添加第二行数据以显示您正在寻找的内容(理想情况下,两行数据之前/之后实际上是一致的)
  • 我按照您所说的 u07ch 进行操作,但这有点棘手。我们有一个主要的教育数据库,在经过一些繁重的 ETL 之后,所有内容都被加载到其中,这确实更符合您的建议。我的最终目标是为教育部门的非技术员工制定一些简单的方法,以验证评估是否从平面文件阶段正确加载到最终产品。
  • @DeusAphor 有没有办法识别apple 中的数据与AppleData 中的数据相关?在您的示例中,我们可以根据列名相似来识别,您的所有列都是这样吗?

标签: sql tsql unpivot


【解决方案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);

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

【讨论】:

  • 你让我非常高兴。标记为答案。我希望你有一个美好的夜晚!非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-20
相关资源
最近更新 更多