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

时间:2013-06-10 20:31:16

标签: sql common-table-expression

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

我正在寻找一种创建CTE的方法,该方法使用另一个CTE作为进一步限制的数据。我有一个为我创建报告的CTE,但我想使用现有的CTE将该报告缩小为另一个输入。

我希望我的问题很明确。

4 个答案:

答案 0 :(得分:22)

您可以将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;

答案 1 :(得分:10)

CTE可以参考以前的CTE:

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

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

答案 2 :(得分:6)

当然,只需直接参考CTE:

WITH Source As
( 
  SELECT * FROM AllData
),
Filtered AS
(
  SELECT * FROM Source WHERE ID = 4
)
SELECT * FROM Filtered

答案 3 :(得分:0)

WITH 
Source ---------1--------- 
As
( 
    SELECT * FROM emp
),
destination----2----------
AS
(
    SELECT * 
    FROM Source 
    WHERE E_id = 4
)

SELECT * FROM destination