Insertar datos en la tabla temporal con consulta


144

Tengo una consulta existente que genera datos actuales, y me gustaría insertarla en una tabla Temp, pero tengo algunos problemas para hacerlo. ¿Alguien tendría alguna idea de cómo hacer esto?

Aquí hay un ejemplo

SELECT *
FROM  (SELECT Received,
              Total,
              Answer,
              ( CASE
                  WHEN application LIKE '%STUFF%' THEN 'MORESTUFF'
                END ) AS application
       FROM   FirstTable
       WHERE  Recieved = 1
              AND application = 'MORESTUFF'
       GROUP  BY CASE
                   WHEN application LIKE '%STUFF%' THEN 'MORESTUFF'
                 END) data
WHERE  application LIKE isNull('%MORESTUFF%', '%') 

Esto parece generar mis datos actualmente de la forma en que los necesito, pero me gustaría pasarlos a una tabla temporal. Mi problema es que soy bastante nuevo en las consultas SQL y no he podido encontrar una manera de hacerlo. O si es posible. Si no es posible, ¿hay una mejor manera de obtener los datos que estoy buscando WHERE application LIKE isNull('%MORESTUFF%','%')en una tabla temporal?


2
¿En una #temptabla que ya existe o necesitaría crear una nueva?
Martin Smith

1
@ MartinSmith - Sería uno nuevo.
chivo expiatorio17

1
LIKE ISNULL('%MORESTUFF%', '%')siempre será lo mismo que LIKE '%MORESTUFF%', ¿no? Dado que '% MORESTUFF%' (el literal de cadena) nunca es nulo?
GNUD

Respuestas:


187
SELECT *
INTO #Temp
FROM

  (SELECT
     Received,
     Total,
     Answer,
     (CASE WHEN application LIKE '%STUFF%' THEN 'MORESTUFF' END) AS application
   FROM
     FirstTable
   WHERE
     Recieved = 1 AND
     application = 'MORESTUFF'
   GROUP BY
     CASE WHEN application LIKE '%STUFF%' THEN 'MORESTUFF' END) data
WHERE
  application LIKE
    isNull(
      '%MORESTUFF%',
      '%')

148

SQL Server R2 2008 necesita la AScláusula de la siguiente manera:

SELECT * 
INTO #temp
FROM (
    SELECT col1, col2
    FROM table1
) AS x

La consulta falló sin el AS xal final.


EDITAR

También es necesario cuando se usa SS2016, tuvo que agregar as tal final.

 Select * into #result from (SELECT * FROM  #temp where [id] = @id) as t //<-- as t

55
Interesante. Acabo de tener el mismo problema. Agregar "Como [x]" al final hizo que todo funcionara bien. ¿Por qué es esto?
padrino

55
@godfathr es porque la cláusula from está usando una tabla derivada
wootscootinboogie

35

La forma más rápida de hacerlo es mediante el comando "SELECCIONAR EN", por ejemplo

SELECT * INTO #TempTableName
FROM....

Esto creará una nueva tabla, no tiene que crearla de antemano.


¿Es posible agregar columnas a #TempTableName?
FrenkyB

@FrenkyB sí, una vez que se crea la tabla, puede usar la declaración ALTER TABLE ADD COLUMN
Yuriy Galanter

12

Personalmente, necesitaba una pequeña mano para descubrir cómo usar esto y es realmente increíble.

IF(OBJECT_ID('tempdb..#TEMP') IS NOT NULL) BEGIN DROP TABLE #TEMP END
        SELECT *
            INTO #TEMP
            FROM (
            The query you want to use many times
            ) AS X

SELECT * FROM #TEMP WHERE THIS = THAT
SELECT * FROM #TEMP WHERE THIS <> THAT
SELECT COL1,COL3 FROM #TEMP WHERE THIS > THAT

DROP TABLE #TEMP

8

Puedes hacer eso así:

INSERT INTO myTable (colum1, column2)
SELECT column1, column2 FROM OtherTable;

Solo asegúrese de que las columnas coincidan, tanto en número como en tipo de datos.


5

Prueba esto:

SELECT *
INTO #Temp
FROM 
(select * from tblorders where busidate ='2016-11-24' and locationID=12
) as X

Utilice alias con x para que no falle el script y el resultado.


3
SELECT * INTO #TempTable 
FROM SampleTable
WHERE...

SELECT * FROM #TempTable
DROP TABLE #TempTable

2

Esto es posible. Intenta de esta manera:

Create Global Temporary Table 
BossaDoSamba 
On Commit Preserve Rows 
As 
select ArtistName, sum(Songs) As NumberOfSongs 
 from Spotfy 
    where ArtistName = 'BossaDoSamba'
 group by ArtistName;
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.