使用查询将数据插入临时表

sca*_*t17 133 sql sql-server ssms

我有一个输出当前数据的现有查询,我想将它插入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%', '%') 
Run Code Online (Sandbox Code Playgroud)

这似乎以我需要的方式输出我的数据,但我想把它传递到Temp Table.我的问题是我对SQL查询很新,但却找不到办法.或者,如果它是可能的.如果不可能,有没有更好的方法将我要查找的数据WHERE application LIKE isNull('%MORESTUFF%','%')放入临时表?

任何帮助将非常感激!谢谢!

Yos*_*ari 166

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%',
      '%')
Run Code Online (Sandbox Code Playgroud)


Sha*_*tin 131

SQL Server R2 2008需要AS如下子句:

SELECT * 
INTO #temp
FROM (
    SELECT col1, col2
    FROM table1
) AS x
Run Code Online (Sandbox Code Playgroud)

查询失败但没有AS x结束.


编辑

使用SS2016时也需要它,不得不添加as t到最后.

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

  • 有趣.我刚才有同样的问题.最后添加"As [x]"使一切正常.为什么是这样? (4认同)
  • @godfathr是因为from子句正在使用派生表 (3认同)

Yur*_*ter 29

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

SELECT * INTO #TempTableName
FROM....
Run Code Online (Sandbox Code Playgroud)

这将创建一个新表,您不必提前创建它.


wvd*_*vdz 7

你可以这样做:

INSERT INTO myTable (colum1, column2)
SELECT column1, column2 FROM OtherTable;
Run Code Online (Sandbox Code Playgroud)

只需确保列匹配,数量与数据类型相同.


the*_*gue 7

就个人而言,我需要一点点的努力来弄清楚如何使用它,它确实很棒。

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
Run Code Online (Sandbox Code Playgroud)


小智 5

尝试这个:

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

请在 x 中使用别名,以免脚本和结果失败。