我正在为快递服务解决一个问题,它们有不同的路线,每个路线可以有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 ..标识符应该是唯一的(基于路径),我需要更新包裹表中的一些空白领域,所以会需要更新脚本。
任何铅将不胜感激。
感谢,
感谢Sagar Gangwal进行编辑。 –