与内与
还行吧
WITH CS AS (
SELECT 'ab' as a
)
SELECT * from cs
Run Code Online (Sandbox Code Playgroud)
http://data.stackexchange.com/mathematics/revision/138658/170321/comment-partition-by-question
但是,一旦我用第二个包裹它with
,
with PS as (
WITH CS AS (
SELECT 'ab' as a
)
SELECT * from cs
) select * from PS
Run Code Online (Sandbox Code Playgroud)
我收到这个错误,
Incorrect syntax near the keyword 'WITH'. Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon. Incorrect syntax near ')'.
带内选择
下面就ok了
select ab.a from (
select a from (SELECT 'ab' as a) b
) ab
Run Code Online (Sandbox Code Playgroud)
这也是运行
with cs as (SELECT 'ab' as a)
select a from cs
Run Code Online (Sandbox Code Playgroud)
但是,用另一个选择包装表达式,正如这个提议的那样,
select a from (
with cs as (SELECT 'ab' as a)
select a from cs
) ab
Run Code Online (Sandbox Code Playgroud)
再次失败并出现相同的错误。
我在 data.stackexchange 中这样做,他们报告说他们使用 MSSQL
从文档
不允许在 CTE 中指定多个 WITH 子句。例如,如果 CTE_query_definition 包含子查询,则该子查询不能包含定义另一个 CTE 的嵌套 WITH 子句。
因此,
with PS as (
WITH CS AS (
SELECT 'ab' as a
)
SELECT * from cs
) select * from PS
Run Code Online (Sandbox Code Playgroud)
给你错误。您可以定义多个 CTE:
WITH CS AS (SELECT 'ab' as a),
PS as (SELECT * from cs)
select * from PS
Run Code Online (Sandbox Code Playgroud)