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/哪个平台?