识别对记录&在db2中为它们设置标志

时间:2013-08-31 09:37:01

标签: sql select db2

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

客户表。

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数据库中。

1 个答案:

答案 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可以有多对,则必须继续执行它,直到没有更新。