2016-08-31 42 views
0

有沒有辦法編寫一個SQL查詢,通常會根據某些條件將多個行返回一行。以下是一個例子和期望的結果。Oracle SQl開發人員 - 根據條件將多行組合到一行中

當與該AGMTNUM關聯的所有ACCTNUM都處於活動狀態時,該查詢僅返回START & AGMTNUM。

表名Customer_Setup 例

Start  AGMTNUM  ACCTNUM  STATUS 
12/1/16 AAAA   123456  ACTIVE 
12/1/16 AAAA   789012  ACTIVE 
12/1/16 AAAA   345675  PENDING 
7/1/16  BBBB   444444  ACTIVE 
7/1/16  BBBB   555555  ACTIVE 
8/1/16  CCCC   666666  PENDING 
8/1/16  CCCC   777777  PENDING 
8/1/16  CCCC   888888  PENDING 
9/1/16  DDDD   999999  ACTIVE 
9/1/16  DDDD   000000  ACTIVE 

預期結果

START  AGMTNUM 
7/1/16  BBBB 
9/1/16  DDDD  

回答

0

嗯。 。 。

select start, agmtnum 
from t 
group by start, agmtnum 
having min(status) = max(status) and min(status) = 'ACTIVE'; 

目前還不清楚start是否是您想要的定義的一部分。你可能想這個微小的變化:

select min(start), agmtnum 
from t 
group by agmtnum 
having min(status) = max(status) and min(status) = 'ACTIVE'; 
+0

我越來越多行每AGMTNUM每個ACCTNUM當每個的狀態爲ACTIVE。當所有ACCTNUM STATUS都處於活動狀態時,我正在查詢每個AGMTNUM只返回一行。 – miculito23

+0

現在好了。錯誤在我的結尾。謝謝!! :) – miculito23

0

另一種方式來做到這一點:

select distinct "Start", agmtnum 
from 
    customer_setup c1 
where 
    not exists (select * from customer_setup c2 where c1.agmtnum = c2.agmtnum and c2."STATUS" <> 'ACTIVE') 
order by 1;