Sorgu ile Geçici Tabloya Veri Ekleme


144

Geçerli verileri çıktı mevcut bir sorgu var ve bir Temp tabloya eklemek istiyorum, ama bunu yaparken bazı sorunlar yaşıyorum. Bunun nasıl yapılacağına dair bir fikir sahibi olabilecek misiniz?

İşte bir örnek

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

Bu şu anda benim veri gerektiği gibi çıktı gibi görünüyor, ama bir Temp Tablosuna geçmek istiyorum. Benim sorunum oldukça SQL sorguları için yeni ve bunu yapmak için bir yol bulmak mümkün olmasıdır. Ya da mümkünse. Mümkün değilse, aradığım verileri WHERE application LIKE isNull('%MORESTUFF%','%')geçici tabloya almanın daha iyi bir yolu var mı?


2
#tempZaten var olan bir tabloya mı yoksa yeni bir tablo mı oluşturmaya ihtiyaç duyar?
Martin Smith

1
@MartinSmith - Yeni bir tane olurdu.
scapegoat17

1
LIKE ISNULL('%MORESTUFF%', '%')hep aynı LIKE '%MORESTUFF%'olacak, değil mi? '% MORESTUFF%' (değişmez dize) asla boş olmadığından?
gnud

Yanıtlar:


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

149

SQL Server R2 2008'in ASaşağıdaki maddeye ihtiyacı vardır :

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

Sorgu AS xsonunda olmadan başarısız oldu .


DÜZENLE

SS2016 kullanırken de gereklidir as t, sonuna eklemek zorunda kaldı .

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

5
İlginç. Ben de aynı sorunu yaşadım. Sonuna "As [x]" eklemek her şeyin yolunda gitmesini sağlamıştır. Bu neden?
godfathr

5
@godfathr çünkü from cümlesi türetilmiş bir tablo kullanıyor
wootscootinboogie

35

Bunu yapmanın en hızlı yolu "SELECT INTO" komutunu kullanmaktır.

SELECT * INTO #TempTableName
FROM....

Bu yeni bir tablo oluşturacak, önceden oluşturmak zorunda değilsiniz.


#TempTableName'e sütun eklemek mümkün mü?
FrenkyB

@FrenkyB evet, tablo oluşturulduktan sonra ALTER TABLE ADD COLUMN deyimini kullanabilirsiniz
Yuriy Galanter

12

Şahsen, bunu nasıl kullanacağımı anlamaya çalışan küçük bir ele ihtiyacım vardı ve gerçekten harika.

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

Bunu şu şekilde yapabilirsiniz:

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

Yalnızca sütunların, veri türünde olduğu gibi sayı olarak eşleştiğinden emin olun.


5

Bunu dene:

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

Lütfen komut dosyası ve sonuçta başarısız olmayacak şekilde x ile takma ad kullanın.


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

SELECT * FROM #TempTable
DROP TABLE #TempTable

2

Bu mümkün. Bu şekilde deneyin:

Create Global Temporary Table 
BossaDoSamba 
On Commit Preserve Rows 
As 
select ArtistName, sum(Songs) As NumberOfSongs 
 from Spotfy 
    where ArtistName = 'BossaDoSamba'
 group by ArtistName;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.