我在这里搜索过这个问题,但是找不到它,如果我们已经在网站上找到它,请重定向我。
我正在寻找一种创建CTE的方法,该方法使用另一个CTE作为进一步限制的数据。我有一个为我创建报告的CTE,但我想使用现有的CTE将该报告缩小为另一个输入。
我希望我的问题很明确。
答案 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