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

标签 mysql row-number

我正在解决一个 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/

相关文章:

php - 处理网络应用程序中的设置

mysql - mysql查询中的多个位置不返回任何内容

sql - 具有增量整数列的 MSSQL Select 语句...不是来自表

mysql - 如何在mysql中进行序号排名

sql - 需要窗口函数来对空值和非空值进行排序

mysql - 如何在不重复的情况下将记录从表插入到另一个表

php - 将两个旧表中的数据插入到新表中

sql - ORACLE SQL 在没有子查询或派生表的情况下检索 n 行

mysql - SQL - 比较同一列中的日期

sql - 是否可以使用 SQL 将身份添加到 GROUP BY?