2013-08-31 67 views
1

設立標誌爲他們,我想,以確定對記錄&爲他們設置的標誌在查詢: 要求如下:識別對記錄和在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個buysell記錄 - 與transsell_id &不同的buysell標誌相同。因此,1212有1對孤兒記錄。由於有2「S」爲1212 transact_id標誌我們可以選擇任何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

你想用transact_flag做什麼?目標是什麼? – WarrenT

+0

對於同一個trasact_id是否可以有多個買賣雙方?例如,如果還有一行包含(14,1212,'B'),那麼您是否希望對買賣雙方(11 + 12和13 + 14)看到transact_flag = 1? –

+0

哪個版本的DB2和哪個平臺? –

回答

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多對,你將不得不繼續執行它,直到有沒有更新。