2013-06-10 12 views
7

Szukałem tego pytania tutaj, ale nie mogłem go znaleźć, proszę przekierować mnie, jeśli już mamy to na stronie.Jak utworzyć CTE, który używa innego CTE jako danych do dalszego ograniczenia?

Szukam sposobu na utworzenie CTE, który używa innego CTE jako danych do dalszego ograniczenia. Mam CTE, który tworzy raport dla mnie, ale chciałbym zawęzić ten raport z innym wprowadzeniem przy użyciu istniejącego CTE.

Mam nadzieję, że moje pytanie jest jasne.

+0

Które dialekt SQL to jest? – hvd

+0

Tym, którego używam jest dialekt 3 – curiousBoy

Odpowiedz

17

Możesz połączyć w łańcuch 2 (lub więcej) CTE.

Na przykład

with ObjectsWithA as 
(
    select * from sys.objects 
    where name like '%A%' 
), 
ObjectsWithALessThan100 as 
(
    select * from ObjectsWithA 
    where object_id < 100 
) 
select * from ObjectsWithALessThan100; 
+0

Wielkie dzięki, działa jak mistrz :) – curiousBoy

8

CTE może odnosić się do poprzednich współczynniki CTE:

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

Jedyną zasadą jest, że odwołania muszą być sekwencyjna. Brak odniesienia do przodu.

+0

Dziękuję bardzo – curiousBoy

5

Jasne, po prostu odwołać CTE bezpośrednio:

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

Dzięki za sugestię, doceń to. – curiousBoy

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

SELECT * FROM destination 
+2

Czy mógłbyś wyjaśnić, co zrobiłeś? –

+0

Podczas gdy twoja odpowiedź może rozwiązać pytanie, zawsze lepiej jest podać opis tego, czym był problem i jak rozwiązuje go twoja odpowiedź. Jest to sugestia do dalszej poprawy tych i przyszłych odpowiedzi. –

+0

@sangu patil: Nie widzę żadnej różnicy między tą jedną a drugą parą odpowiedzi! Zanim opublikujesz odpowiedź, upewnij się, że jeszcze nie została opublikowana! W przeciwnym razie jest to po prostu "powódź" i sprawia, że ​​inni ludzie znajdują trudniejsze rozwiązania. – curiousBoy