Daten mit Abfrage in temporäre Tabelle einfügen


144

Ich habe eine vorhandene Abfrage, die aktuelle Daten ausgibt, und ich möchte sie in eine Temp-Tabelle einfügen, habe jedoch einige Probleme damit. Hätte jemand einen Einblick, wie das geht?

Hier ist ein Beispiel

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

Dies scheint meine Daten derzeit so auszugeben, wie ich es brauche, aber ich möchte sie an eine temporäre Tabelle übergeben. Mein Problem ist, dass ich mit SQL-Abfragen ziemlich neu bin und keinen Weg gefunden habe, dies zu tun. Oder ob es überhaupt möglich ist. Wenn es nicht möglich ist, gibt es einen besseren Weg, um die Daten zu erhalten, die ich sucheWHERE application LIKE isNull('%MORESTUFF%','%') gesuchten in eine temporäre Tabelle zu bekommen?


2
In eine #tempbereits vorhandene Tabelle oder müsste eine neue erstellt werden?
Martin Smith

1
@ MartinSmith - Es wäre eine neue.
Sündenbock17

1
LIKE ISNULL('%MORESTUFF%', '%')wird immer das gleiche sein wie LIKE '%MORESTUFF%', nicht wahr? Da '% MORESTUFF%' (das String-Literal) niemals null ist?
Gnud

Antworten:


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 benötigt die folgende ASKlausel:

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

Die Abfrage schlug ohne das AS xam Ende fehl .


BEARBEITEN

Es wird auch benötigt, wenn SS2016 verwendet wird, musste as tam Ende hinzugefügt werden .

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

5
Interessant. Ich hatte gerade das gleiche Problem. Durch Hinzufügen von "As [x]" am Ende funktionierte alles einwandfrei. Warum ist das?
Godfathr

5
@godfathr, weil die from-Klausel eine abgeleitete Tabelle verwendet
wootscootinboogie

35

Der schnellste Weg, dies zu tun, ist die Verwendung des Befehls "SELECT INTO", z

SELECT * INTO #TempTableName
FROM....

Dadurch wird eine neue Tabelle erstellt. Sie müssen sie nicht im Voraus erstellen.


Ist es möglich, Spalten zu #TempTableName hinzuzufügen?
FrenkyB

@FrenkyB Ja, sobald die Tabelle erstellt ist, können Sie die Anweisung ALTER TABLE ADD COLUMN verwenden
Yuriy Galanter

12

Persönlich brauchte ich eine kleine Hand, um herauszufinden, wie man das benutzt, und es ist wirklich großartig.

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

Sie können das so machen:

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

Stellen Sie einfach sicher, dass die Spalten übereinstimmen, sowohl in der Anzahl als auch im Datentyp.


5

Versuche dies:

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

Bitte verwenden Sie einen Alias ​​mit x, damit das Skript und das Ergebnis nicht fehlschlagen.


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

SELECT * FROM #TempTable
DROP TABLE #TempTable

2

Das ist möglich. Versuchen Sie Folgendes:

Create Global Temporary Table 
BossaDoSamba 
On Commit Preserve Rows 
As 
select ArtistName, sum(Songs) As NumberOfSongs 
 from Spotfy 
    where ArtistName = 'BossaDoSamba'
 group by ArtistName;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.