根据同一个表中其他列的值为列分配值

时间:2013-10-30 13:46:52

标签: sql oracle aggregate-functions oracle-sqldeveloper

我有一个包含Date和Order列的表。我想在此表中添加一个名为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

1 个答案:

答案 0 :(得分:2)

使用分析函数row_number在每个日期内获取行号1,2,3,....然后加一个并除以二:

select 
  dateid, 
  orderid, 
  trunc((row_number() over (partition by dateid order by orderid) +1 ) / 2) as batch
from mytable;