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