2013-02-27 72 views
0

我想獲取具有特定代碼號的人數。用於顯示特定數據的SQL查詢

下面是我現在正在做的一個例子。 select * from persons where code in ('1', '2', '3', '4', '5')

in會告訴我每個有這些數字的人,但這並不排除任何東西。我不知道如何顯示那些只有這些代碼,沒有別的。

希望這是有道理的。

+4

「但這並不排除任何東西」嗯......是的。是的,它確實。該查詢將不顯示任何具有例如'code ='6''的'persons'行。 – 2013-02-27 20:48:13

+0

對不起,我意識到它不會顯示任何其他行,但如果我單獨查找人員,我可以看到其他代碼,如'6',我不希望那些人出現在報告中。 – Holly 2013-02-27 21:02:07

回答

0

爲此,您需要查看所有數字。最好的辦法是使用group byhaving

select personid 
from person 
group by personid 
having sum(case when code not in ('1', '2', '3', '4', '5') then 1 else 0 end) = 0 

having條款計數不屬於那些代碼的記錄數。如果計數爲0,則記錄被返回。

如果你想確保所有5碼中選擇,然後使用這個條件:

having sum(case when code not in ('1', '2', '3', '4', '5') then 1 else 0 end) = 0 and 
     count(distinct code) = 5 
+0

這就是它,謝謝! – Holly 2013-02-27 21:12:03

0

這是快速和骯髒的,和我假設一個ID字段對個人表存在...

select a.* 
    from persons a 
    join (select id,count(*) count 
      from persons b 
     where code in ('1','2','3','4','5') 
     group by id 
     having count()=1) b 
    on a.id=b.b.id 

* 編輯:我想我喜歡這個版本稍微好一點:) *

這裏的想法是讓只有那些人從列表中只記錄一個ID,因此計數。將它加回到同一個人表中,它將列出目標列表中具有該值的唯一記錄。