1

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

4

3 回答 3

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

DISTINCT 的使用很重要。

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

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

于 2011-06-29T20:13:56.630 回答
1
SELECT Customer
FROM MyTable
GROUP BY Customer
HAVING COUNT(DISTINCT TimeZone) > 1
于 2011-06-29T20:11:28.587 回答
0

丑陋但有效:

select CustomerID
where  CustomerID in 
(
select customerID from
     (select distinct CustomerID
     from   table
     where  TimeZone in ('NY','CHI','SF')) t
having count(*) = 3
)
于 2011-06-29T20:13:38.883 回答