Sql server 将多个表合并到一个现有表中

Sql server 将多个表合并到一个现有表中,sql-server,database,Sql Server,Database,这是表创建和插入查询 上面的代码给出如下输出 但我只想这样 上面的代码返回12个不同的表,但我只希望所有记录都在一个表中,而不创建任何新表 那么,我该怎么做呢 请帮帮我 谢谢。您的查询没有多大意义,但您可以构建一个列列表,然后执行以下操作: 在这里,all列是通过循环动态创建的 以下是完整的查询 您的问题可能是重复的,但它太不清楚,无法帮助您找到它。我只是想问,如何将while循环返回的12个不同表合并到一个表中,而不创建任何新表。这里所有的工作都是在while循环中完成的。谢谢你的参考,但

这是表创建和插入查询

上面的代码给出如下输出

但我只想这样

上面的代码返回12个不同的表,但我只希望所有记录都在一个表中,而不创建任何新表

那么,我该怎么做呢

请帮帮我


谢谢。

您的查询没有多大意义,但您可以构建一个列列表,然后执行以下操作:


在这里,all列是通过循环动态创建的

以下是完整的查询


您的问题可能是重复的,但它太不清楚,无法帮助您找到它。我只是想问,如何将while循环返回的12个不同表合并到一个表中,而不创建任何新表。这里所有的工作都是在while循环中完成的。谢谢你的参考,但是有人使用了表记录中已经存在的列名,但是这里我动态地给出了列名,这里的列不是固定的,它的all dependen循环。使用静态数据当然很简单,但它是动态的。在这种情况下,您需要使用动态sql。创建表和创建插入。检查这里:谢谢你的帮助。如果没有表结构和一些示例数据,我无法回答这个问题。请再次查看我的问题并更新答案。请注意,如果列名等于列值,则实际上不需要表:对不起,我不明白您想说什么?请把它清理干净。
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
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)
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)