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
-子句。
我正在尝试在 "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
-子句。