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