我在桌子下面。
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]
有人可以为此提供帮助吗?
答案 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] |
+---------------------------------------------------------------+