如何创建使用另一个CTE作为数据进一步限制的CTE?

cur*_*Boy 15 sql common-table-expression

我在这里搜索过这个问题,但找不到它,如果我们已经在网站上有它,请重定向我.

我正在寻找一种方法来创建CTE,它使用另一个CTE作为进一步限制的数据.我有一个CTE,它为我创建了一个报告,但我希望使用现有的CTE以另一个输入来缩小此报告.

我希望我的问题很明确.

Dav*_*haw 25

您可以将2个(或更多)CTE链接在一起.

例如

with ObjectsWithA as
(
  select * from sys.objects
  where name like '%A%'
),
ObjectsWithALessThan100 as
(
  select * from ObjectsWithA
  where object_id < 100
)
select * from ObjectsWithALessThan100;
Run Code Online (Sandbox Code Playgroud)


Gor*_*off 12

CTE可以参考以前的CTE:

with report as (
      <your query here>
     ),
     reportLimited as (
      select *
      from report
      where foo = @bar
    )
select *
from reportLimited
Run Code Online (Sandbox Code Playgroud)

唯一的规则是引用必须是顺序的.没有前瞻性参考


D S*_*ley 6

当然,只需直接参考CTE:

WITH Source As
( 
  SELECT * FROM AllData
),
Filtered AS
(
  SELECT * FROM Source WHERE ID = 4
)
SELECT * FROM Filtered
Run Code Online (Sandbox Code Playgroud)