Stata odbc SQL 一个查询中的多个 CTE

Stata odbc SQL multiple CTE in one query

我正在尝试在 "odbc load, exec("WITH...”语句中执行多个 CTE 表达式。我确认这两个 CTE 提取了所需的信息。

但是,Stata 似乎不喜欢使用两个 CTE。我试图用分号将两者分开,例如 SQL 状态,但它 returns "Incorrect syntax near ';'.

有什么建议吗?这是我要查看的代码:

. #delimit ;
delimiter now ; 
. odbc load, exec("
> WITH BIRegionSIC (Region, BranchID, Branch, SIC, CoreMarket, MarketSegment)
>         AS
>         (
>         SELECT
>                 [A].Region,
>                 [A].BranchID,
>                 [A].Branch,
>                 [B].SIC,
>                 [B].[Core Market] AS CoreMarket,
>                 [B].[Market Segment] AS MarketSegment
>         FROM
>                 [B]
>                 INNER JOIN [A]
>                 ON [B].Region = [A].Region
>         )
> ;WITH cteRNE (Year, Month, SoldTo, BranchID, cteSales)
>         AS
>         (
>         SELECT 
>                 Year([Invoice Date]) AS Year, 
>                 Month([Invoice Date]) AS Month,
>                 [Sold to (Number)] AS SoldTo,
>                 [Sales Office] AS BranchID,
>                 Sum([Invoiced Sales]) AS cteSales
>         FROM [A]
>                 INNER JOIN [Sales]
>                 ON [A].BranchID = [Sales].[Sales Office]
>         WHERE [A].Region = 'NE'
>         GROUP BY
>                 Year([Invoice Date]),
>                 Month([Invoice Date]),
>                 [Sales Office],
>                 [Sold to (Number)]
>         )
> SELECT
>                 BIRegionSIC.Region,
>                 BIRegionSIC.BranchID,
>                 BIRegionSIC.Branch,
>                 BIRegionSIC.CoreMarket,
>                 BIRegionSIC.MarketSegment,
>                 cteRNE.Year,
>                 cteRNE.Month,
>                 SUM([cteRNE].[cteSales]) AS Sales
>         FROM
>                 (
>                 cteRNE 
>                 INNER JOIN
>                         [C]
>                         ON cteRNE.SoldTo = [C].[Sold To]
>                 )
>                 INNER JOIN
>                         BIRegionSIC
>                         ON cteRNE.BranchID = BIRegionSIC.BranchID
>         GROUP BY
>                 BIRegionSIC.Region,
>                 BIRegionSIC.BranchID,
>                 BIRegionSIC.Branch,
>                 BIRegionSIC.CoreMarket,
>                 BIRegionSIC.MarketSegment,
>                 cteRNE.Year,
>                 cteRNE.Month
>         ORDER BY
>                 BIRegionSIC.Region ASC,
>                 BIRegionSIC.BranchID ASC,
>                 BIRegionSIC.Branch ASC,
>                 BIRegionSIC.CoreMarket ASC,
>                 BIRegionSIC.MarketSegment ASC,
>                 cteRNE.Year ASC,
>                 cteRNE.Month ASC
> ") 
> dsn(sourcefile) clear;
The ODBC driver reported the following diagnostics
[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near ';'.
SQLSTATE=42000
r(682);

end of do-file

r(682);

感谢任何建议!我定界以便代码在 do 文件中可读,并且 运行 没有将定界符设置为分号会导致相同的错误。

此致,

瑞安

您应该按以下方式声明多个 CTE:

WITH cte AS (
)

, cte2 AS (
)

不是通过多次使用 WITH-子句。