当前位置: 首页 > 面试题库 >

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

百里朝
2023-03-14
问题内容

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

源最多只能有两列,最多一千行。我仅按行执行此操作。我尝试做一个“ 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);

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



 类似资料:
  • 给定以下数据帧: 我只想通过COL1来解开“COL4”和“Year”,同时保持COL2和COL3的机智。最终结果应如下所示: 另外,如果在“COL1”下有一些记录没有“A”怎么办? 我假设解压时,解决方案将在COL2和COL3上查找匹配的记录(如果使用的是这种方法)。我的意思是,如果列的顺序没有像我的例子中那样排序,它将生成相同的结果。 谢谢

  • 我在我的列表视图中添加了一个可绘制的分隔线,但它出现在除最后一项之外的所有项目中。 我在列表中只有5个项目,所以在最后一个项目之后都是空白,我想在最后一项之后也有一个分隔符 我试过这个: 在我的列表视图中。但它不起作用 非常感谢。

  • 我正在尝试将XBee输出的段分组到一个变量中,该变量将它们连接起来。我正在使用Processing来编码和编译。我遇到的问题是输出(println)每隔一个字节就跳过一次(也许这是错误的术语)。因此i=4到11的XBee输出应该如下所示: 0,19,162,0,64,121,230,206(这是由十六进制转换的XBee地址)。

  • 问题内容: 我想知道什么是提取列表列表中每个子列表的第一项并将其附加到新列表的最佳方法。所以,如果我有: 我想退出,并从中创建一个单独的列表。 我试过了: 问题答案: 使用列表理解:

  • 设置是否接收Queue的每日消息数量统计邮件 方法参数 SetQueueDailyStatisticsStateRequest queueName : String : required Queue名称 enabled : boolean : required 是否接收每日消息数量统计邮件 注: 如若接收,须设置用户邮箱地址。 方法无返回 查看当前是否允许接收Queue的每日消息数量统计邮件 方法

  • 本文向大家介绍按一列分组,并在MySQL中用分隔符显示另一列的相应记录,包括了按一列分组,并在MySQL中用分隔符显示另一列的相应记录的使用技巧和注意事项,需要的朋友参考一下 为此,将GROUP_CONCAT()与GROUP BY一起使用。在这里,GROUP_CONCAT()用于将来自多行的数据连接到一个字段中。 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表