Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何从表中选择重复项_Sql_Sql Server - Fatal编程技术网

Sql 如何从表中选择重复项

Sql 如何从表中选择重复项,sql,sql-server,Sql,Sql Server,考虑这个名为“Customer”的非常大的表的示例: CustomerID | LastName | FirstName | Address | City| -------------|----------|-----------|---------|------| 1520年|盖尔|弗朗西斯科| XPTO |伦敦|** 2214 |桑托斯|安东尼奥|图多|波尔图| 3998 | Freix | Luís | IUPO |魁北克| 1520年|盖尔|弗朗西斯科|斯普托|罗马|** 5691 |安

考虑这个名为“Customer”的非常大的表的示例:

CustomerID | LastName | FirstName | Address | City|
-------------|----------|-----------|---------|------|
1520年|盖尔|弗朗西斯科| XPTO |伦敦|**
2214 |桑托斯|安东尼奥|图多|波尔图|
3998 | Freix | Luís | IUPO |魁北克|
1520年|盖尔|弗朗西斯科|斯普托|罗马|**
5691 |安东|安娜|蒂迪|里斯本|
1520年|盖尔|弗朗西斯科|斯普托|罗马|**
从这个小示例可以看出,对于同一个客户(
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

有人能帮我找出我开发的查询有什么问题吗?

您可以使用
HAVING
来筛选:

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

您可以使用
HAVING
来筛选:

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

如果需要城市,您可以使用
exists

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

如果需要城市,您可以使用
exists

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

您可以使用以下选项:

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   |

您可以使用以下选项:

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   |

@安娜。你不接受这个答案有什么原因吗?它应该比在中使用group by@Anna>的更有效。你不接受这个答案有什么原因吗?它应该比在中使用分组方式的更有效。