用于显示特定数据的SQL查询

时间:2013-02-27 20:47:00

标签: sql reporting

我正在尝试获取具有特定代码编号的人数。

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

in会向我显示拥有这些数字的所有人,但不排除任何内容。我不知道如何展示那些只有那些代码的东西。

希望这是有道理的。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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的那些人员记录,因此计数。将其连接回同一个人表,它将列出目标列表中唯一具有该值的记录。