反透视列以生成行

Posted

技术标签:

【中文标题】反透视列以生成行【英文标题】:Unpivot columns to generate rows 【发布时间】:2013-05-08 18:18:10 【问题描述】:

我有一个这样的查询:

SELECT '35111212', '11245452', '42215512'...... and more values.

这会导致:

(No column name)    (No column name)    (No column name)
--------           --------            --------
35111212           11245452            42215512

我需要将其转换为:

(No column name)
--------
35111212
11245452
42215512

不使用“联合”是否可行?我在选择中有大量的值。

【问题讨论】:

值来自哪里,它们只是字符串值?他们是从一张桌子上来的吗?能发一下表结构吗? 只是字符串,很多!这是我无法使用联合的问题 但是你从哪里得到这个字符串列表呢? 我从必须在 Delphi 应用程序中处理的 XML 文件中获取列表,因此在 delphi 中我构建了一个这样的 commandText。我无法在这里解释所有内容,但我的想法是在不使用“WHERE IN”和“UNION”的情况下加入一个包含此列表的表,导致列表太大 您可以将整个 XML blob 放入一个临时表中,然后使用 xquery/xpath 提取您需要的值。否则,如果它们真的只是一堆字符串值,那么TSQL中的选项并不多。 【参考方案1】:

如果您的列被命名,您可以这样做:

select val from  
( 
   select col1 = '1', col2 = '2', col3 = '3'
) a
unpivot 
(
   var for col in (col1, col2, col3)
) as unpvt

【讨论】:

以上是关于反透视列以生成行的主要内容,如果未能解决你的问题,请参考以下文章

SQL 中的透视/反透视

shell三剑客之awk 报告生成器

excel数据透视表如何生成柱状图表

透视列以填充另一列中的值

在 Tableau 中反透视数据 将行转换为列

pandas groupby 应用于多个列以生成新列