如何将查询结果存储到临时表中

use*_*127 0 sql sql-server

我试图使用以下查询将SQL查询生成的结果插入临时表:

SELECT * 
INTO #YourTempTable
FROM
    (WITH cte AS 
     (
        SELECT
            sb.case, sb.Trace, sb.Amount, sp.edge, sp.UserId,
            count(*) over (partition by sp.edge) as cnt
        FROM 
            Budget sb 
        JOIN
            Sap sp ON sb.Trace = sp.Trace
        WHERE 
            sb.Trace IN (SELECT Trace FROM Sap 
                         WHERE sb.UserId in ('R5', 'HB'))
     )
     SELECT cte.*
     FROM cte
     WHERE cnt > 1
     ORDER BY edge DESC;
)
Run Code Online (Sandbox Code Playgroud)

我收到错误:

消息156,级别15,状态1,行4
关键字'with'附近的语法不正确.

消息319,级别15,状态1,行4
关键字'with'附近的语法不正确.如果此语句是公用表表达式,xmlnamespaces子句或更改跟踪上下文子句,则必须以分号终止先前的语句.

消息102,级别15,状态1,行12
''''附近的语法不正确.

任何人都可以让我知道这件事吗?

Gor*_*off 6

WITH之前SELECT:

with cte as (
      select sb.case, sb.Trace, sb.Amount, sp.edge, sp.UserId,
             count(*) over (partition by sp.edge) as cnt
      from Budget sb join
           Sap sp 
           on sb.Trace = sp.Trace
      where sb.Trace in (select Trace from Sap where sb.UserId in ('R5', 'HB'))
     )
SELECT * 
INTO #YourTempTable
FROM cte
WHERE cnt > 1
ORDER BY edge desc;
Run Code Online (Sandbox Code Playgroud)

作为一个说明:你的语法由Oracle支持,而不是由其他数据库.一般来说,WITH应该在声明的最开头.

此外,子查询是不必要的.实际上,您将获得另外两个错误:子查询没有别名,并且ORDER BY子查询中不允许(除非TOPFETCH FIRST使用).