2014-01-07 93 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

你有一個'UNION',這就是爲什麼。兩個單獨的計數。 –

+0

有點想通,如果我最初創建一個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

相關問題