Sql 在db2中识别pairs记录并为它们设置标志

Sql 在db2中识别pairs记录并为它们设置标志,sql,select,db2,Sql,Select,Db2,我想识别成对记录并在查询中为它们设置标志: 要求如下: 客户表 account_id trasact_id buysellflag 11 1212 S 12 1212 B 13 1212 S 54 4545 S 89 4875 B 对于多个帐户,有相同的事务处理ID。如果同一交易id有两个买卖标记B&S,我想设置一个标记。

我想识别成对记录并在查询中为它们设置标志: 要求如下:

客户表

account_id trasact_id   buysellflag
11           1212        S
12           1212        B
13           1212        S
54           4545        S
89           4875        B
对于多个帐户,有相同的事务处理ID。如果同一交易id有两个买卖标记B&S,我想设置一个标记。对于1212交易id,有3个买卖记录-相同的交易id和不同的买卖标记。因此,对于1212,有1对和1个孤立记录。由于1212 transact_id有2个“S”标志,我们可以选择任何1条记录,因此没有条件选择要选择的“S”

account_id trasact_id   buysellflag     
11           1212        S                 
12           1212        B               
13           1212        S 
然后,应按如下方式设置标志:

account_id trasact_id   buysellflag     transact_flag
11           1212        S                 1
12           1212        B                 1
13           1212        S                 0
54           4545        S                 0
89           4875        B                 0

这在DB2数据库中。

您的需求/条件并不完全清楚

以下是一些您可以尝试的SQL:

update TEST as t1
set transact_flag = 1
where transact_flag = 0
and 
(
 (
 buysellflag = 'S'
 and account_id = (select min(account_id) from TEST as t2 where transact_flag = 0 and buysellflag = 'S' and t2.transact_id = t1.transact_id) 
 and 0 < (select count(*) from TEST as t3 where transact_flag = 0 and buysellflag = 'B' and t3.transact_id = t1.transact_id)
 ) or (
 buysellflag = 'B' 
 and account_id = (select min(account_id) from TEST as t3 where transact_flag = 0 and buysellflag = 'B' and t3.transact_id = t1.transact_id) 
 and 0 < (select count(*) from TEST as t4 where transact_flag = 0 and buysellflag = 'S' and t4.transact_id = t1.transact_id)
 )
) 

如果一个transact\u id可能有多个对,则您必须继续执行它,直到没有更新。

您试图用transact\u标志做什么?目标是什么?同一trasact_id是否可以有多个买家-卖家对?例如,如果有另外一行包含141212个“B”,您是否希望看到买卖双方对11+12和13+14的transact_flag=1?以及哪个版本的DB2/哪个平台?