反透视列以生成行
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
【讨论】:
以上是关于反透视列以生成行的主要内容,如果未能解决你的问题,请参考以下文章