クエリを使用して一時テーブルにデータを挿入する


144

現在のデータを出力する既存のクエリがあり、それを一時テーブルに挿入したいのですが、そうすることでいくつか問題があります。これを行う方法について誰かが洞察を持っていますか?

ここに例があります

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

これは私のデータを現在必要な方法で出力しているようですが、一時テーブルに渡したいのですが。私の問題は、SQLクエリにかなり慣れていないため、その方法を見つけることができなかったことです。またはそれさえ可能なら。それが不可能な場合、探しているデータをWHERE application LIKE isNull('%MORESTUFF%','%')一時テーブルに入れるより良い方法はありますか?


2
#tempすでに存在するか、新しいものを作成する必要がありますテーブル?
Martin Smith

1
@MartinSmith-新しいものになります。
scapegoat17

1
LIKE ISNULL('%MORESTUFF%', '%')常にと同じLIKE '%MORESTUFF%'ですよね?'%MORESTUFF%'(文字列リテラル)がnullになることはないのですか?
gnud

回答:


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ではAS、次のような句が必要です。

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

クエリAS xは最後にがなければ失敗しました。


編集

SS2016を使用する場合にも必要ですas t。最後に追加する必要がありました。

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

5
面白い。私は同じ問題を抱えていました。最後に「[x]として」を追加すると、すべてが正常に機能します。どうしてこれなの?
godfathr

5
@godfathrこれは、from句が派生テーブルを使用しているためです
wootscootinboogie

35

これを行う最も速い方法は、 "SELECT INTO"コマンドを使用することです。

SELECT * INTO #TempTableName
FROM....

これで新しいテーブルが作成されます。事前に作成する必要はありません。


#TempTableNameに列を追加することはできますか?
FrenkyB 2017

@FrenkyBはい、テーブルが作成されると、ALTER TABLE ADD COLUMNステートメントを使用できます
Yuriy Galanter

12

個人的に、私はこれをどのように使用するかを理解する小さな手が必要でした、そしてそれは本当に素晴らしいです。

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

あなたはこのようにそれを行うことができます:

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

列がデータ型と数値の両方で一致していることを確認してください。


5

これを試して:

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

xでエイリアスを使用して、スクリプトが失敗しないようにしてください。



2

これは可能です。この方法を試してください:

Create Global Temporary Table 
BossaDoSamba 
On Commit Preserve Rows 
As 
select ArtistName, sum(Songs) As NumberOfSongs 
 from Spotfy 
    where ArtistName = 'BossaDoSamba'
 group by ArtistName;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.