gpt4 book ai didi

mysql - 使用按另一个列值分组更新列值

转载 作者:行者123 更新时间:2023-11-29 18:28:07 26 4
gpt4 key购买 nike

我正在解决一个 express 服务问题,他们有不同的路线,每条路线可以有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)

此处来自北线的地 block P1、P2 和来自东线的 P6、P7 具有相同的 GroupId。但我想要基于路线的包裹上的唯一标识符,即而不只是 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.. 标识符应该是唯一的(基于路线),并且我需要更新包裹表上的一些空字段,因此需要更新脚本。

任何线索都将不胜感激。

谢谢

最佳答案

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)

您可以尝试上面的查询。

关于mysql - 使用按另一个列值分组更新列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45980833/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com