2013-09-10 17 views
24

Kann ein CTE innerhalb eines CTE geschrieben werden?CTE in einem CTE

Ich möchte, dass es dieser Logik folgt, aber der Interpreter mag diesen Code nicht.

with outertest as(

    with test as (
     select 
      SRnum, 
      gamenumber, 
      StartOfDistribution, 
      ApplicationNumber 
     from #main 
     where startofdistribution = '2011-06-14 00:00:00.000' 
     and SRnum = '313' 
     --order by SRnum, gamenumber, StartOfDistribution, ApplicationNumber 
    ) 
    select 
     ApplicationNumber 
     ,count(*) as RetailerAppearance 
    from test 
    group by ApplicationNumber 
    having count(*) = 4 

) select count(*) from outertest 

Antwort

59

Sie können nicht verschachtelt CTEs wie in SQL Server, aber können Sie mehrere CTEs die folgende Art und Weise verwendet werden:

;with test as 
(
    select 
     SRnum, 
     gamenumber, 
     StartOfDistribution, 
     ApplicationNumber 
    from #main 
    where startofdistribution = '2011-06-14 00:00:00.000' 
    and SRnum = '313' 
    --order by SRnum, gamenumber, StartOfDistribution, ApplicationNumber 
), 
outertest as 
(
    select 
     ApplicationNumber 
     ,count(*) as RetailerAppearance 
    from test 
    group by ApplicationNumber 
    having count(*) = 4 
) 
select count(*) 
from outertest 
+0

Scheint, wie Sie entweder eines der beiden WAK-Abfragen ausgeführt werden können. Irgendeine Art, beides zu laufen? – Naufal

+0

@Naufal Ich bin mir nicht sicher, ob ich deine Frage verstehe. Dies kettet die CTEs zusammen, so dass sie gleichzeitig laufen. – Taryn