这是表创建和插入查询
If not exists(select * from sysobjects where name='hrs') Create table hrs(hr int) declare @cnt int =1 while @cnt <= 12 begin insert into hrs values(@cnt) set @cnt=@cnt+1 end
declare @cnt1 int = 1
while @cnt1<=12
begin
EXEC('select he'+@cnt1+' = case when hr = 1 then '+@cnt1+' end from hrs')
set @cnt1=@cnt1+1
end
上面的代码返回12个不同的表,但我只想要一个表中的所有记录(不创建任何新表)。
那么,我该怎么做呢?
请帮帮我。
感谢。
答案 0 :(得分:1)
您的查询没有多大意义,但您可以构建一个列列表,然后exec
:
declare @columns nvarchar(max)
declare @cnt int = 1
while @cnt <= 12
begin
set @columns = isnull(@columns + ', ', '') + 'He' + cast(@cnt as nvarchar) +
' = sum(case when hr = ' + cast(@cnt as nvarchar) + ' then hr end)'
end
declare @sql nvarchar(max) = 'select ' + @columns ' + from hr'
exec (@sql)
答案 1 :(得分:1)
这里all列是通过循环
动态创建的以下是完整查询
declare @s varchar(MAX)='' declare @j int = 1 while @j<=12 begin if @j = 12 Set @s = @s+'he'+convert(varchar,@j)+'=MAX(case when hr='+convert(varchar,@j)+' then '+convert(varchar,@j)+' end)' else set @s = @s+'he'+convert(varchar,@j)+'=MAX(case when hr='+convert(varchar,@j)+' then '+convert(varchar,@j)+' end),' set @j=@j+1 end set @s = 'select '+@s+' from hrs' exec(@s)