2017-08-31 81 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!这很简单,我浪费了很多时间写故事!谢谢萨加尔。你摇滚! –

相关问题