2014-11-03 2 views
0

이 TSQL CTE 내에서 각 인보이스에 대해 버전 1까지 상위 버전부터 반복적으로 시작하는 인보이스 목록을 작성하려고합니다. (물론하지CTE 순차 쿼리를 채우기 위해

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 

내가 많은 변화를 시도했다 :

Invoice Ver 
10000 3 
20000 5 
30000 8 
40000 2 

을 그리고 내가 무엇을 달성 할 수 있도록 노력하겠습니다 것은 :

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'에 대한 선택은 당신에게 줄 것이다 오른쪽 하나!)하지만 내가 할 수있는 최선의 방법은 2 단계 만 달성하는 것입니다 ...

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

둘러보기 주셔서 감사합니다!

답변

3

당신은 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

하하를 감소하기 위해 각 재귀 호출을 필요로, 이것에 대한 재귀 CTE가 필요 - 난 당신이 내가 할 필요가 말했다 정확하게 일을 생각했다. 나는 Microsoft 예제가 CTE에서 앵커 쿼리를 참조하는 두 가지 다리 때문에 저를 버렸다고 가정합니다. 어쨌든, 잘 했어! – flaZer