Vanilla SQL,用于在单列中选择多个值

时间:2011-06-29 20:08:20

标签: sql sql-match-all

如果我的表中有一列中的客户ID和另一列中的时区,是否有一个简单的SQL语句可以选择具有不同时区值的所有客户ID?换句话说,我想找到那些在纽约,芝加哥和旧金山设有办事处的客户,而不是那些只在一个或其他时区设有办事处的客户。

3 个答案:

答案 0 :(得分:3)

SELECT Customer
FROM MyTable
GROUP BY Customer
HAVING COUNT(DISTINCT TimeZone) > 1

使用DISTINCT非常重要。

COUNT(TimeZone)计算所有非空值,而不仅仅是不同的值。所以它等于COUNT(*),除非TimeZone为null。

换句话说,如果给定客户有三个办公室,但所有办公室都在东部时区,则COUNT(TimeZone)将为3,而COUNT(DISTINCT TimeZone)将为1.

答案 1 :(得分:1)

SELECT Customer
FROM MyTable
GROUP BY Customer
HAVING COUNT(DISTINCT TimeZone) > 1

答案 2 :(得分:0)

丑陋但有效:

select CustomerID
where  CustomerID in 
(
select customerID from
     (select distinct CustomerID
     from   table
     where  TimeZone in ('NY','CHI','SF')) t
having count(*) = 3
)