2014-11-03 2 views
0

Внутри этого TSQL CTE я пытаюсь создать список счетов-фактур, которые рекурсивно начинаются с родительской версии, вплоть до Ver 1 для каждого счета-фактуры.Рекурсивный запрос CTE для заполнения последовательности

With 
    myList 
    AS (Select 10000 as INVOICE, 3 as VER 
     UNION ALL 
     Select 20000 as INVOICE, 5 as VER 
     UNION ALL 
     Select 30000 as INVOICE, 8 as VER 
     UNION ALL 
     Select 40000 as INVOICE, 2 as VER) 
,newList (Invoice, Ver) 
    AS (Select 
     L1.Invoice 
     ,L1.Ver 
     from 
     myList L1 
     UNION ALL 
     Select 
     L2.Invoice 
     ,L2.Ver - 1 Ver 
     from 
     myList L2 
     Join 
     newList L3 
     on L2.invoice = L3.Invoice and L2.VER = L3.VER 
     Where 
     L2.Ver > = 1) 
Select * from newList order by INVOICE, VER desc 

Избранная на 'MyList' даст вам:

Invoice Ver 
10000 3 
20000 5 
30000 8 
40000 2 

И то, что я надеюсь достичь является:

Invoice Ver 
10000 3 
10000 2 
10000 1 
20000 5 
20000 4 
20000 3 
20000 2 
20000 1 
30000 8 
30000 7 
30000 6 
30000 5 
30000 4 
30000 3 
30000 2 
30000 1 
40000 2 
40000 1 

Я пробовал много вариантов (и, конечно, не правильный!), но самое лучшее, что я могу сделать, это достичь только 2-го уровня ...

Invoice Ver 
10000 3 
10000 2 
20000 5 
20000 4 
30000 8 
30000 7 
40000 2 
40000 1 

Спасибо, что посмотрели!

ответ

3

вам нужно иметь рекурсивного CTE для этого, в каждом рекурсивном необходимости вызова для уменьшения ver столбец

With myList 
AS 
( Select 10000 as INVOICE, 3 as VER 
     UNION ALL 
     Select 20000 as INVOICE, 5 as VER 
     UNION ALL 
     Select 30000 as INVOICE, 8 as VER 
     UNION ALL 
     Select 40000 as INVOICE, 2 as VER 
) 
,newList (Invoice, Ver) 
    AS 
(
    SELECT INVOICE, VER from myList 
    UNION ALL 
    SELECT INVOICE, VER-1 FROM newList 
    WHERE VER >1 
) 
    SELECT * FROM newList order by INVOICE, VER desc 
+0

ха-ха, - подумал я делал именно то, что вы сказали, что мне нужно делать. Я предполагаю, что пример Microsoft отбросил меня, так как обе стороны этого CTE ссылаются на якорный запрос. Несмотря ни на что, молодец! – flaZer

Смежные вопросы