![](/img/trans.png)
[英]SQL Query to update a column based on the values of other columns in the same table
[英]Assign value to a column based on values of other columns in the same table
我有一个包含日期和订单列的表。 我想在此表中添加一个名为Batch的列,其填充方式如下:对于每个Date,我们从第一个Order开始,并在一个批处理中对每两个订单进行分组。
这意味着对于本例中Date = 1的记录(前4个记录),前两个记录(Order = 10和Order = 30)将具有批号:Batch = 1,接下来的两个记录(Order = 80和Order = 110)将具有Batch = 2,依此类推。
如果最后剩余记录的数量小于批量大小(在此示例中为2),则剩余的订单将具有单独的批次编号,如下例所示,具有Date =的记录数量2是奇数,所以最后一条记录(第5条记录)将有Batch = 3。
Date Order
-----------
1 10
1 30
1 80
1 110
2 20
2 30
2 50
2 70
2 120
3 90
Date Order Batch
------------------
1 10 1
1 30 1
1 80 2
1 110 2
2 20 1
2 30 1
2 50 2
2 70 2
2 120 3
3 90 1
使用解析函数row_number在每个日期内获取行号1,2,3,.... 然后加一个并除以二:
select
dateid,
orderid,
trunc((row_number() over (partition by dateid order by orderid) +1 ) / 2) as batch
from mytable;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.