2013-11-20 47 views
85

我有一个现有的查询输出当前数据,我想将其插入到Temp表中,但我遇到了一些问题。有人会对如何做到这一点有所了解吗?使用查询将数据插入临时表中

下面是一个例子

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'表中,或者它需要创建一个新的? –

+1

@MartinSmith - 这将是一个新的。 – scapegoat17

回答

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

可以是这样做的:

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

只需确保列匹配,无论是在数量的数据类型。

21

最快的方法是使用“SELECT INTO”命令,例如

SELECT * INTO #TempTableName 
FROM.... 

这将创建一个新表,您不必事先创建它。

+0

是否可以向#TempTableName添加列? – FrenkyB

+0

@FrenkyB是的,一旦创建了表,您可以使用ALTER TABLE ADD COLUMN语句 –

86

的SQL Server 2008 R2需要AS条款如下:

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

查询没有AS x末失败。

+4

有趣。我只是有同样的问题。在最后添加“As [x]”使一切正常工作。为什么是这样? – godfathr

+2

@godfathr这是因为from子句使用派生表 – wootscootinboogie

2

试试这个:

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

请使用别名为x,所以它不会失败的脚本和结果。

2

就我个人而言,我需要一个小小的手来搞清楚如何使用它,它真的很棒。

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 
1
SELECT * INTO #TempTable 
FROM SampleTable 
WHERE... 

SELECT * FROM #TempTable 
DROP TABLE #TempTable 
0

这是可能的。 试试这个方法:

Create Global Temporary Table 
BossaDoSamba 
On Commit Preserve Rows 
As 
select ArtistName, sum(Songs) As NumberOfSongs 
from Spotfy 
    where ArtistName = 'BossaDoSamba' 
group by ArtistName; 
相关问题