我想识别配对记录&在查询中为它们设置标志: 要求如下:
客户表。
account_id trasact_id buysellflag
11 1212 S
12 1212 B
13 1212 S
54 4545 S
89 4875 B
对于多个帐户,有相同的transact_ids。如果同一个trasact_id有两个buysell标志(B& S),我想设置一个标志。至于1212 transact_id,有3条买卖记录 - 相同的transact_id&不同的buysell标志。因此对于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数据库中。
答案 0 :(得分:0)
您的要求/条件并不完全清楚。
以下是您可以尝试的一些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_id可以有多对,则必须继续执行它,直到没有更新。