2014-01-21 33 views
0

在sql.i即時通訊新具有以下生成查詢結果篩選出基於條件的多個行

DOCNUM USER STATUS 
------ ----- ------ 
10001 A1  PENDING 
10001 A2  APPROVED 
10001 A3  PENDING 
10002 B1  PENDING 
10002 B2  PENDING 
10002 B3  PENDING 

我需要過濾掉僅基於docnum,其中如實施例以上,docnum 10001有待定的行3行,但有批准的行之一,因此我不需要捕獲所有這3行。至於Docnum 10002,所有3行仍然懸而未決,所以我需要捕獲它。 任何想法如何我可以過濾出查詢選擇?非常感謝

+0

標籤你靶向的_RDBMS_。 –

回答

0

我不太清楚你的意思。 類似於

select * 
from yourtable 
where status = 'PENDING' 

好的,從您的評論我現在明白你的意思。試試這個:

select * 
    from yourtable t1 
where not exists (
     select 1 
     from yourtable t2 
     where t1.docnum = t2.docnum 
      and t2.status != 'PENDING' 
) 

解釋它是如何工作的: 內查詢選擇有一個國家批准某處的所有文件。如果此set爲空對某些文件,所有的國家都必須是PENDING

+0

嗨羅納德,我不能過濾的狀態,因爲我需要它鏈接到docnum。 –

+0

「鏈接到docnum」是什麼意思?像'select * from yourtable where status ='PENDING'和docnum ='12345'? (或者如果docnum被定義爲數字,當然沒有引號) – Ronald

+0

嗨ronald,一個文檔編號可以有多個行,由不同的用戶生成,但每個文檔只能有2個狀態,'等待'或'批准',所以出於報告目的,我只想抓取那些沒有任何批准狀態的文件,而那些已經有至少一行「批准」的文件被過濾掉。 –

0

如果你需要找到每個docnum「未決文件計數」,那麼以下就足夠了:

SELECT docnum, count(1) FROM `table` where Status = 'PENDING' GROUP BY Docnum; 

如果你只是想要找到所有正在等待的條目,那麼@Ronald上面提供的答案將僅僅是工作。

如果你想申請狀態爲指定docnum你可以做以下做選擇待定行:

SELECT * FROM `table` where Status = 'PENDING' AND Docnum = '10001'; 

乾杯