web-dev-qa-db-fra.com

Insérer des données dans une table temporaire avec une requête

J'ai une requête existante qui génère des données actuelles et j'aimerais l'insérer dans une table Temp, mais j'ai quelques problèmes à le faire. Quelqu'un aurait-il des idées sur la façon de procéder?

Voici un exemple

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%', '%') 

Cela semble produire mes données actuellement de la manière dont j'en ai besoin, mais j'aimerais les transmettre à une table temporaire. Mon problème est que je suis assez nouveau dans les requêtes SQL et que je n'ai pas trouvé le moyen de le faire. Ou si c'est même possible. Si ce n'est pas possible, existe-t-il un meilleur moyen d'obtenir les données que je recherche WHERE application LIKE isNull('%MORESTUFF%','%') dans une table temporaire?

Toute aide serait très appréciée! Merci!

108
scapegoat17
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%',
      '%')
140
Yosi Dahari

SQL Server R2 2008 a besoin de la clause AS comme suit: 

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

La requête a échoué sans le AS x à la fin. 


MODIFIER

C'est également nécessaire lorsque vous utilisez SS2016, il fallait ajouter as t à la fin.

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

Le moyen le plus rapide de procéder consiste à utiliser la commande "SELECT INTO", par exemple.

SELECT * INTO #TempTableName
FROM....

Cela va créer une nouvelle table, vous n'avez pas à la créer à l'avance.

25
Yuriy Galanter

Vous pouvez faire ça comme ça:

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

Assurez-vous simplement que les colonnes correspondent, en nombre comme en type de données.

8
wvdz

Personnellement, j'avais besoin d'une petite main pour comprendre comment utiliser ceci et c'est vraiment génial.

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
4
bteague

Essaye ça: 

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

Veuillez utiliser un alias avec x pour que le script et le résultat ne manquent pas. 

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

SELECT * FROM #TempTable
DROP TABLE #TempTable
1
Saqib A. Azhar

C'est possible. Essayez de cette façon: 

Create Global Temporary Table 
BossaDoSamba 
On Commit Preserve Rows 
As 
select ArtistName, sum(Songs) As NumberOfSongs 
 from Spotfy 
    where ArtistName = 'BossaDoSamba'
 group by ArtistName;
0
Luiz Henrique Lima