2013-09-10 7 views
24

Можно ли написать CTE в CTE?CTE в CTE

Я хочу, чтобы он следовал этой логике, но интерпретатору не нравится этот код.

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 

ответ

59

Вы не можете вкладывать, CTE, как что в SQL Server, но вы можете использовать несколько КТР следующим образом:

;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

Похоже, вы можете работать только как один из двух CTE запросов. Любой способ запустить оба? – Naufal

+0

@Naufal Я не уверен, что понимаю ваш вопрос. Это связывает CTE вместе, поэтому они запускаются одновременно. – Taryn