DB2/SQL:在表中插入数据时如何增加最大值

nue99wik  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(194)

我有2张table(table:访问和购物篮),我需要一种方法来插入数据到表购物篮与一些数据从表购物。
表:访问
| 维斯标识|维斯_名称|维斯日期|
| - -|- -|- -|
| 一个|麦克|2021年12月9日|
| 2个|吕|2021年9月2日|
| 三个|路加|2021年3月4日|
| 四个|占士|2021年1月19日|
bas_ID与维斯_ID是相同的ID。我想将访问日期'vis_date'相同的项目'freebie'插入到所有访问〉= '2021-05-01'的购物篮中,以字段购物篮日期'bas_date'
我的问题是,如果购物篮中有商品,下一个购物篮位置'bas_pos'应该是最大值+ 1。但如果table购物篮中没有商品,bas_pos应该是1。
表输出:筐
| 基础标识|基本项目|基线日期|低音位置|
| - -|- -|- -|- -|
| 一个|帽盖|2021年12月9日|一个|
| 一个|球|2021年12月9日|2个|
| 一个|果实|2021年12月9日|三个|
| 一个|免费赠品|2021年12月9日|四个|
| 2个|免费赠品|2021年9月2日|一个|
我想我必须用subselect来实现?我的代码适合DB2吗?谢谢。

Insert into basket
  select vis_ID, 'freebie', vis_date, case when(select max(bas_pos) from basket b
                                       where b.bas_ID = c.vis_ID) is null then '1' else int(select vis_ID, 'freebie', vis_date, case when(select max(bas_pos) from basket b
                                       where b.bas_ID = c.vis_ID) +1 end
  from visit c
  where vis_date >= '2021-05-01'
x759pob2

x759pob21#

试试看:

Insert into basket (bas_ID, bas_item, bas_date, pas_pos)
select 
  c.vis_ID, 'freebie', c.vis_date
, coalesce (b.bas_pos, 0) + rn_
from
(
  select 
    vis_ID, vis_date
  , row_number () over (partition by vis_id) as rn_
  from visit
  where vis_date >= '2021-05-01'
) c
left join 
(
  select bas_ID, max (pas_pos) as bas_pos
  from basket 
  group by bas_ID
) b on b.bas_ID = c.vis_ID

相关问题