쿼리를 사용하여 임시 테이블에 데이터 삽입


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

답변:


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 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
흥미 롭군 방금 같은 문제가있었습니다. 끝에 "As [x]"를 추가하면 모든 것이 제대로 작동합니다. 왜 이런거야?
godfathr

5
@godfathr 그것은 from 절이 파생 테이블을 사용하기 때문입니다
wootscootinboogie

35

가장 빠른 방법은 "SELECT INTO"명령을 사용하는 것입니다. 예 :

SELECT * INTO #TempTableName
FROM....

이렇게하면 새 테이블이 만들어 지므로 미리 만들 필요는 없습니다.


#TempTableName에 열을 추가 할 수 있습니까?
FrenkyB

@FrenkyB 예, 테이블이 생성되면 당신은 ALTER TABLE ADD 열 문을 사용할 수 있습니다
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와 함께 별칭을 사용하십시오.


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

SELECT * FROM #TempTable
DROP TABLE #TempTable

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.