4

当我运行返回一列的 SQL 查询返回的行数可变时,我想将每一行转换为列 VALUE(我不介意列标题/标题是什么)。

例如

Column1
-------
a
b
c
d
e

我想要一个脚本,它将上面的内容转换为如下表格:

Col1 Col2 Col3 Col4 Col5
------------------------
a    b    c    d    e

(请注意,我不关心列名)。

我知道我不能使用 PIVOT,因为行号不固定(它们基于 SQL 查询)。

有任何想法吗?

谢谢!

4

1 回答 1

3

您正在尝试调整结果并在列名中包含一个计数器。由于我假设您不知道潜在的列数,因此您需要使用动态 SQL 来完成此操作。

这应该接近使用ROW_NUMBER来获取计数器:

declare @cols AS NVARCHAR(MAX), 
        @colswithalias AS NVARCHAR(MAX), 
        @query  AS NVARCHAR(MAX)

set @colswithalias = STUFF((SELECT distinct ',' + QUOTENAME(col1) 
                          + ' AS Col' 
                          + CAST(ROW_NUMBER() OVER (ORDER BY col1) as varchar(10))
                      FROM yourtable 
                      FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @cols = STUFF((SELECT distinct ',' + QUOTENAME(col1)
                      FROM yourtable 
                      FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')


set @query = 'SELECT ' + @colswithalias + '
             from 
             (
                select col1 rn, col1
                from yourtable
            ) x
            pivot 
            (
                max(rn)
                for col1 in (' + @cols + ')
            ) p '

execute(@query)
于 2013-06-25T02:53:56.790 回答