显示动态查询SQL Server中每列的别名

时间:2017-10-12 19:36:17

标签: sql sql-server tsql sql-server-2012

我在桌子下面。

create table demo(id int, dataval varchar(50))

insert into demo 
    select 1, 'val'
    union
    select 2, 'val1'
    union
    select 3, 'val3'

我正在尝试使用以下查询获取变量中max()包围的dataval列的值列表

DECLARE @maxcols AS NVARCHAR(MAX)

SELECT @maxcols = STUFF((SELECT DISTINCT ',' + 'MAX('+QUOTENAME([dataval] ) + ') AS [val]' 
                         FROM demo
                         FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')

SELECT @maxcols AS val

我低于数值。

max([val])as [val],max([val1])as [val],max([val3])as [val]

此处别名作为静态值[val]。我需要将别名显示为列值。

预期产出:

max([val])as [val1],max([val1])as [val2],max([val3])as [val3]

有人可以为此提供帮助吗?

1 个答案:

答案 0 :(得分:3)

您可以使用row_Number,如下所示:

DECLARE 
     @maxcols AS NVARCHAR(MAX)
select @maxcols = STUFF((SELECT distinct ',' + 'max('+QUOTENAME([dataval] )+')as [val'+ convert(varchar(10), Row_Number() over (order by (SELECT NULL))) + ']' 
                    from  demo
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

select @maxcols as val

输出如下:

+---------------------------------------------------------------+
|                              val                              |
+---------------------------------------------------------------+
| max([val])as [val1],max([val1])as [val2],max([val3])as [val3] |
+---------------------------------------------------------------+