Masukkan Data ke Temp Tabel dengan Query

144

Saya memiliki permintaan yang sudah ada yang menampilkan data saat ini, dan saya ingin memasukkannya ke dalam tabel Temp, tetapi saya mengalami beberapa masalah. Adakah yang punya wawasan tentang cara melakukan ini?

Berikut ini sebuah contoh

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

Ini sepertinya menampilkan data saya saat ini dengan cara yang saya perlukan, tapi saya ingin meneruskannya ke Temp Table. Masalah saya adalah bahwa saya cukup baru untuk SQL Queries dan belum dapat menemukan cara untuk melakukannya. Atau jika itu mungkin. Jika tidak memungkinkan, apakah ada cara yang lebih baik untuk mendapatkan data yang saya cari WHERE application LIKE isNull('%MORESTUFF%','%')dalam tabel temp?

kambing hitam17
sumber
2
Ke dalam #temptabel yang sudah ada atau perlu membuat yang baru?
Martin Smith
1
@ MartinSmith - Ini akan menjadi yang baru.
scapegoat17
1
LIKE ISNULL('%MORESTUFF%', '%')akan selalu sama dengan LIKE '%MORESTUFF%', bukan? Karena '% MORESTUFF%' (string literal) tidak pernah nol?
gnud

Jawaban:

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%',
      '%')
Yosi Dahari
sumber
148

SQL Server R2 2008 membutuhkan ASklausa sebagai berikut:

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

Permintaan gagal tanpa AS xdi akhir.


EDIT

Ini juga diperlukan saat menggunakan SS2016, harus menambahkan as tsampai akhir.

 Select * into #result from (SELECT * FROM  #temp where [id] = @id) as t //<-- as t
Shaun Luttin
sumber
5
Menarik. Saya baru saja mengalami masalah yang sama. Menambahkan "As [x]" pada akhirnya membuat semuanya berfungsi dengan baik. Kenapa ini?
godfathr
5
@ godfathr itu karena dari klausa menggunakan tabel turunan
wootscootinboogie
35

Cara tercepat untuk melakukan ini adalah menggunakan perintah "SELECT INTO" mis

SELECT * INTO #TempTableName
FROM....

Ini akan membuat tabel baru, Anda tidak harus membuatnya terlebih dahulu.

Yuriy Galanter
sumber
Apakah mungkin menambahkan kolom ke #TempTableName?
FrenkyB
@FrenkyB ya, setelah tabel dibuat, Anda dapat menggunakan pernyataan ALTER TABLE ADD COLUMN
Yuriy Galanter
12

Secara pribadi, saya perlu tangan kecil untuk mencari tahu bagaimana menggunakan ini dan itu benar-benar hebat.

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
Liga
sumber
8

Anda dapat melakukannya seperti ini:

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

Pastikan kolom-kolomnya sesuai, keduanya dalam jumlah seperti pada tipe data.

wvdz
sumber
5

Coba ini:

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

Silakan gunakan alias dengan x sehingga skrip dan hasilnya tidak akan gagal.

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

SELECT * FROM #TempTable
DROP TABLE #TempTable
Saqib A. Azhar
sumber
2

Ini mungkin. Coba dengan cara ini:

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