0

考虑一个名为“客户”的非常大的表的示例:

CustomerID   | LastName | FirstName | Address | City |
-------------|----------|-----------|---------|------|
1520         | Guere    |Francisco  |XPTO     |London|**
2214         | Santos   |António    |TUDO     |Porto |
3998         | Freixe   |Luís       |IUPO     |Quebec|
1520         | Guere    |Francisco  |XPTO     |Rome  |**
5691         | Anton    |Ana        |TIDI     |Lisbon|
1520         | Guere    |Francisco  |XPTO     |Rome  |**

从这个小例子可以看出,对于同一个客户 ( CustomerID = 1520),City 列中有不同的值。

例如,在这种情况下所需的输出将是:

 CustomerID | City |
 -----------|------|
 1520       |London|
 1520       |Rome  |

我尝试开发一个查询,该查询返回在 City 列中具有不同值的 CustomerID。

SELECT CustomerID, City 
FROM (SELECT CustomerID, COUNT(DISTINCT City) FROM Customer GROUP BY CustomerID) 
WHERE City > 1

有人可以帮我解决我开发的查询有什么问题吗?

4

3 回答 3

2

exists如果你想要城市,你可以使用:

select c.*
from customers c
where exists (select 1
              from customers c2
              where c2.customerid = c.customerid and c2.city <> c.city
             );

或者group by,如果您只想要客户,您可以使用:

select customerid
from customers
group by customerid
having min(city) <> max(city);
于 2018-07-04T17:00:02.153 回答
1

你可以HAVING用来过滤:

SELECT *
FROM Customer
WHERE CustomerID IN(SELECT CustomerID
                    FROM Customer 
                    GROUP BY CustomerID
                    HAVING COUNT(DISTINCT City) > 1);
于 2018-07-04T16:59:49.283 回答
1

您可以使用以下内容:

SELECT CustomerID, City
FROM Customer
WHERE CustomerID IN (
  SELECT CustomerID
  FROM Customer
  GROUP BY CustomerID
  HAVING COUNT(DISTINCT City) > 1
)
GROUP BY CustomerID, City;

结果:

| CustomerID | City   |
|------------|--------|
| 1520       | London |
| 1520       | Rome   |
于 2018-07-04T17:01:59.500 回答