2015-09-08 47 views
1

我需要關於如何爲同一採購訂單編碼重複行ID併爲其分配新行號的幫助。我想使用Line ID + 100作爲額外的重複行。例如,如果採購訂單#11有三個行ID#5,那麼第一個將保持爲5,第二個將是501,第三個將是502,但是,我只能得到1,2或3,或者如果沒有複製1.我不確定用什麼來增加。我希望有人能夠協助或指導。謝謝更改重複行的值

PurchaseOrderID LineID PackingList NewLineID 
11    1  12323  1 
11    1  78786  2  
11    2  67523  1  
11    3  44559  1  
11    4  44559  1  
11    5  96545  1  
11    5  12323  2  
11    5  34569  3 

裝箱單導致重複的相同的線路ID。

下面是我想使用它給我上面NewLineID:

SELECT 
    PurchaseOrderID, 
    LineID, 
    PackingList, 
    ROW_NUMBER() over 
    (
     partition by PurchaseOrderID, LineID 
     order by PurchaseOrderID, LineID 
) as NewLineID 
FROM PurchaseOrderTransactions 

回答

2

使用ROW_NUMBERCASE

WITH Cte AS(
    SELECT 
     PurchaseOrderID, 
     LineID, 
     PackingList, 
     RN = ROW_NUMBER() OVER (PARTITION BY PurchaseOrderID, LineID ORDER BY LineID) 
    FROM PurchaseOrderTransactions 
) 
SELECT 
    PurchaseOrderID, 
    LineID, 
    PackingList, 
    NewLineID = CASE 
        WHEN RN = 1 THEN LineID 
        ELSE (LineID * 100) + (RN - 1) 
       END 
FROM Cte 

,不使用CTE:

SELECT 
    PurchaseOrderID, 
    LineID, 
    PackingList, 
    NewLineID = 
     CASE 
      WHEN ROW_NUMBER() OVER (PARTITION BY PurchaseOrderID, LineID ORDER BY LineID) = 1 THEN LineID 
      ELSE (LineID * 100) + (ROW_NUMBER() OVER (PARTITION BY PurchaseOrderID, LineID ORDER BY LineID) - 1) 
     END 
FROM PurchaseOrderTransactions 

SQL Fiddle

| PurchaseOrderID | LineID | PackingList | NewLineID | 
|-----------------|--------|-------------|-----------| 
|    11 |  1 |  12323 |   1 | 
|    11 |  1 |  78786 |  101 | 
|    11 |  2 |  67523 |   2 | 
|    11 |  3 |  44559 |   3 | 
|    11 |  4 |  44559 |   4 | 
|    11 |  5 |  96545 |   5 | 
|    11 |  5 |  12323 |  501 | 
|    11 |  5 |  34569 |  502 | 
+0

非常感謝你 - 兩種方式都很完美! – Rosie