Fusionar más de una tabla en una tabla existente

Fusionar más de una tabla en una tabla existente

Esta es la consulta de creación e inserción de tablas

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

El código anterior da la salida como ingrese la descripción de la imagen aquí

pero solo quiero eso ingrese la descripción de la imagen aquí

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

El código anterior devuelve las 12 tablas diferentes, pero solo quiero todos los registros en una tabla (sin crear ninguna tabla nueva).

Entonces, ¿cómo puedo hacer esto?

Por favor, ayúdame.

Gracias.

Mostrar la mejor respuesta

Su pregunta probablemente sea un duplicado, pero no está muy claro para ayudar a encontrarlo.

Solo estoy preguntando cómo puedo fusionar las 12 tablas diferentes (que devuelve el ciclo while) en una sola tabla sin crear ninguna tabla nueva. Aquí todos los trabajos realizados en while loop.

La pregunta es más clara ahora con datos de muestra y el resultado deseado. Es un duplicado de este: stackoverflow.com/questions/15745042/…

Gracias por su referencia, pero estaban usando el nombre de la columna que ya está en el registro de la tabla, pero aquí estoy dando el nombre de la columna dinámicamente y aquí la columna no está arreglada, todo depende del ciclo. Con datos estáticos, por supuesto, es fácil pero es dinámico.

En ese caso, necesita usar sql dinámico. Tanto para crear la tabla, como para crear el INSERT. Consulte aquí: sommarskog.se/dynamic_sql.html#unknowncolumns

Gracias por tu ayuda.

Su consulta no tiene mucho sentido, pero puede crear una lista de columnas y luego exec eso:

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)

No puedo responder eso sin la estructura de la tabla y algunos datos de ejemplo.

mira mi pregunta otra vez

Actualicé la respuesta. Tenga en cuenta que realmente no necesita una tabla si el nombre de su columna es igual al valor de su columna :)

Lo siento, no pude entender, ¿qué quieres decir? Por favor, límpielo.

Aquí todas las columnas se crean dinámicamente a través del bucle

Aquí está la consulta completa

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)