2013-06-10 11 views
7

Ho cercato questa domanda qui ma non ho potuto trovarla, ti preghiamo di reindirizzare se ce l'abbiamo già sul sito.Come creare CTE che utilizza un altro CTE come ulteriore limite per i dati?

Sto cercando un modo per creare CTE che utilizza un altro CTE come ulteriore limite per i dati. Ho un CTE che crea un rapporto per me, ma vorrei limitare questo rapporto con un altro input utilizzando il CTE esistente.

Spero che la mia domanda sia chiara.

+0

Quale dialetto SQL è questo? – hvd

+0

Quello che sto usando è il dialetto 3 – curiousBoy

risposta

17

È possibile concatenare 2 (o più) CTE.

Per esempio

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

Grazie mille, funziona come un campione :) – curiousBoy

8

Un CTE può fare riferimento a CTE precedenti:

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

L'unica regola è che i riferimenti devono essere sequenziale. Nessun riferimento futuro.

+0

Grazie mille – curiousBoy

5

Certo, basta riferimento CTE direttamente:

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

Grazie per il suggerimento, apprezzalo. – curiousBoy

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

SELECT * FROM destination 
+2

Potresti spiegare cosa hai fatto? –

+0

Mentre la tua risposta può risolvere la domanda, è sempre meglio se puoi fornire una descrizione di quale fosse il problema e in che modo la tua risposta lo risolva. Questo è un suggerimento per migliorare ulteriormente questa e le future risposte. –

+0

@sangu patil: Non riesco a vedere alcuna differenza tra questa e l'altra coppia date le risposte! Prima di pubblicare la tua risposta, assicurati che non sia già stata pubblicata! Altrimenti, è solo un "diluvio" e rende le altre persone più difficili da trovare. – curiousBoy