1

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

客户表。

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

对于多个帐户,有相同的 transact_ids。如果同一个 trasact_id 有两个买入标志 (B & S),我想设置一个标志。至于 1212 transact_id 则有 3 条 buysell 记录 - 相同的 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 数据库中。

4

1 回答 1

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 可能有多个对,您将不得不继续执行它,直到没有更新为止。

于 2013-12-20T01:30:08.313 回答