我正在为快递服务解决一个问题,他们有不同的路线,每条路线可以有n个包裹。他们正在一个袋子里安排2个包裹。我设法得到如下数据:
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 |
-------|----------|---------|
使用以下查询:
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)
此处Parcel P1,来自北航的P2和来自东航的P6,P7具有相同的GroupId。 但是我希望Parcel上的唯一标识符基于Route而不是1/2/3 ..如果我能得到N1,N2,N3(北航)和E1,E2(东航)它对我有帮助把包裹放在袋子里面。
所以我希望结果集看起来像:
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 ..标识符应该是唯一的(基于路由)并且我需要更新Parcel表上的一些空字段,那么将需要更新脚本。
任何领导都将受到赞赏。
谢谢,
答案 0 :(得分: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)
您可以尝试以上查询。