2014-01-07 2 views
0

Следующий запрос приводит к дублированию row_numbers после первого секционированного набора. Например, первый набор fldPK = 2403 и fldCIA = 1 я получаю следующее ...ROW_NUMBER() OVER PARTITION возвращает повторяющиеся значения

2403 1 1 
2403 1 2 
2403 1 3 
2403 1 4 

и во втором сете я получаю ...

2403 2 1 
2403 2 1 <-- duplicate 1 within the same partition 
2403 2 2 
2403 2 3 

    SELECT *, 1 AS fldBF, 
       ROW_NUMBER() OVER (PARTITION BY fldPK, fldCIA ORDER BY fldPK) AS sCount 
    INTO #tmpTable 
    FROM V_qryCSPGA 
    WHERE fldPK IN(SELECT DISTINCT thePK FROM FN_qryAllDTPK()) 

    UNION ALL 

    SELECT *, 1 AS fldBF, 
       ROW_NUMBER() OVER (PARTITION BY fldPK, fldCIA ORDER BY fldPK) AS sCount 
    FROM FN_qryCSGBA() 
    WHERE fldPK IN(SELECT DISTINCT thePK FROM FN_qryAllDTPK()) 
    ORDER BY fldPK, fldCIA, fldNDat; 

Почему это происходит? для каждого набора fldPK и fldCIA мне нужно перезапустить строки подсчет числа на 1, более соответствующие данные будут ...

2403 3 1 
2403 3 2 
2403 3 3 
2403 3 4 
2403 3 5 
2403 3 6 
2403 3 7 
2403 3 8 
2403 3 9 
+1

У вас есть «СОЮЗ», вот почему. Два отдельных счета. –

+0

Kinda figured, есть ли все-таки сделать обновление, если я изначально создаю столбец NULL sCount? Я попробовал, но все значения sCount были равны 1. – codingManiac

+1

Вы могли бы UNION в производной таблице, а затем ROW_NUMBER() во внешнем запросе. Это даст разные числа для строк, которые теперь получают дубликаты (если это то, что вам нужно.) –

ответ

3

Это остановит повторяющиеся цифры. Будет ли новая нумерация тем, чем вы на самом деле являетесь, это еще одна вещь:

; WITH cte AS 
    (SELECT *, 1 AS fldBF 
    FROM V_qryCSPGA 
    WHERE fldPK IN(SELECT DISTINCT thePK FROM FN_qryAllDTPK()) 

    UNION ALL 

    SELECT *, 1 AS fldBF 
    FROM FN_qryCSGBA() 
    WHERE fldPK IN(SELECT DISTINCT thePK FROM FN_qryAllDTPK()) 
) 
SELECT *, 
     ROW_NUMBER() OVER (PARTITION BY fldPK, fldCIA ORDER BY fldPK) AS sCount 
INTO #tmpTable 
FROM cte 
ORDER BY fldPK, fldCIA, fldNDat; 
+0

Работает отлично, спасибо! – codingManiac

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