2017-08-31 56 views
0

我正在爲快遞服務解決一個問題,它們有不同的路線,每個路線可以有n個包裹。他們將兩個包裹放在一個包裏。我設法得到這樣的數據:使用下面的查詢使用另一個列值組更新列值

Route | ParcelId | GroupId | 
-------|----------|--------- 
NORTH | P1  | 1 | 
NORTH | P2  | 1 | 
NORTH | P3  | 2 | 
NORTH | P4  | 2 | 
NORTH | P5  | 3 | 
EAST | P6  | 1 | 
EAST | P7  | 1 | 
EAST | P8  | 2 | 
CENTRAL| P9  | 1 | 
CENTRAL| P10  | 1 | 
CENTRAL| P11  | 2 | 
CENTRAL| P11  | 2 | 
-------|----------|---------| 

:從北路線和P6

select 
Route, ParcelId 
    -- calculate the group number for every 2 parcels, increment 1 
    ceiling(row_number() over(partition by route order by ParcelId)/2.0) GroupId 
from Parcel (nolock) 
where 
    ship_date = cast(getdate() as date) 

這裏包裹P1,P2,P7從東線具有相同的GroupId。 但是我想在基於Route ie的Parcels上使用唯一的標識符,而不是隻有1/2/3 ..如果我能得到N1,N2,N3(對於北航)和E1,E2(對於East航線),它將對我在包裏放置包裹。

所以我想結果集應該是這樣的:

Route | ParcelId | GroupId | 
-------|----------|--------- 
NORTH | P1  | N1 | 
NORTH | P2  | N1 | 
NORTH | P3  | N2 | 
NORTH | P4  | N2 | 
NORTH | P5  | N3 | 
EAST | P6  | E1 | 
EAST | P7  | E1 | 
EAST | P8  | E2 | 
CENTRAL| P9  | C1 | 
CENTRAL| P10  | C1 | 
CENTRAL| P11  | C2 | 
CENTRAL| P11  | C2 | 
-------|----------|---------| 

如果不完全N1/E1/C1 ..標識符應該是唯一的(基於路徑),我需要更新包裹表中的一些空白領域,所以會需要更新腳本。

任何鉛將不勝感激。

感謝,

+0

感謝Sagar Gangwal進行編輯。 –

回答

0
select 
Route, ParcelId,CONCAT(CASE WHEN ROUTE='NORTH' THEN 'N' WHEN ROUTE='EAST' THEN 'E' WHEN ROUTE='WEST' THEN 'W' WHEN ROUTE='SOUTH' THEN 'S' WHEN ROUTE='CENTRAL' THEN 'C' END,GroupId) AS GroupId 
from Parcel 
where ship_date = cast(getdate() as date) 

你可以試試上面的查詢。

+1

Arrr!這很簡單,我浪費了很多時間寫故事!謝謝薩加爾。你搖滾! –

相關問題