首页 > 解决方案 > 在同一列上使用多个 WHERE 条件进行选择时 AND 的简写

问题描述

我有PETS带有 columns的表格IndexOwnerAnimal带有以下行:

Index, Owner, Animal
--------------------
1, Anne, cat
2, Anne, dog
3, Anne, rabbit
4, Bill, dog
5, Bill, dog
6, Bill, rabbit
7, John, cat
8, John, dog
9, Johh, parrot
10, Susy, rabbit
11, Susy, parrot
12, Susy, parrot

我需要两个输出:获取拥有的所有所有者

  1. 一只猫或一只狗
  2. 一只猫和一只狗

IN我作为速记运算符得到的第一个输出OR

SELECT DISTINCT Owner FROM PETS WHERE Animal IN ('cat','dog')

是否有等效的速记运算符AND这个线程中的解决方案HAVING COUNT不太有效,因为它返回'Bill''dog'两次,但是没有'cat'.

标签: sql-serverselectwhere-clauseshorthand

解决方案


没有速记,不,但我个人会使用HAVING带有条件聚合的条件聚合来拥有这两个逻辑:

SELECT Owner
FROM dbo.Pets
GROUP BY Owner
HAVING COUNT(CASE Animal WHEN 'dog' THEN 1 END) > 0
   AND COUNT(CASE Animal WHEN 'cat' THEN 1 END) > 0;

而且,显然,您可以通过将 更改ANDOR.


推荐阅读