Gra*_*per 137 sql sql-server sql-server-2008
我需要运行一个select语句,返回列的值不相同的所有行(例如EmailAddress).
例如,如果表格如下所示:
CustomerName EmailAddress
Aaron aaron@gmail.com
Christy aaron@gmail.com
Jason jason@gmail.com
Eric eric@gmail.com
John aaron@gmail.com
Run Code Online (Sandbox Code Playgroud)
我需要查询返回:
Aaron aaron@gmail.com
Christy aaron@gmail.com
John aaron@gmail.com
Run Code Online (Sandbox Code Playgroud)
我阅读了很多帖子并尝试了不同的查询无济于事.我认为应该工作的查询如下.有人可以提出替代方案或告诉我查询可能有什么问题吗?
select EmailAddress, CustomerName from Customers
group by EmailAddress, CustomerName
having COUNT(distinct(EmailAddress)) > 1
Run Code Online (Sandbox Code Playgroud)
Ser*_*gan 232
这比以下EXISTS方式快得多:
SELECT [EmailAddress], [CustomerName] FROM [Customers] WHERE [EmailAddress] IN
(SELECT [EmailAddress] FROM [Customers] GROUP BY [EmailAddress] HAVING COUNT(*) > 1)
Run Code Online (Sandbox Code Playgroud)
小智 45
您的查询不正确的是您通过电子邮件和名称进行分组,这组合了每组唯一的电子邮件和名称组合在一起,因此
aaron and aaron@gmail.com
christy and aaron@gmail.com
john and aaron@gmail.com
Run Code Online (Sandbox Code Playgroud)
被视为3个不同的组,而不是所有属于1个单独的组.
请使用下面给出的查询:
select emailaddress,customername from customers where emailaddress in
(select emailaddress from customers group by emailaddress having count(*) > 1)
Run Code Online (Sandbox Code Playgroud)
Mar*_*arc 12
怎么样
SELECT EmailAddress, CustomerName FROM Customers a
WHERE Exists ( SELECT emailAddress FROM customers c WHERE a.customerName != c.customerName AND a.EmailAddress = c.EmailAddress)
Run Code Online (Sandbox Code Playgroud)
select CustomerName,count(1) from Customers group by CustomerName having count(1) > 1
Run Code Online (Sandbox Code Playgroud)
只是为了好玩,这是另一种方式:
;with counts as (
select CustomerName, EmailAddress,
count(*) over (partition by EmailAddress) as num
from Customers
)
select CustomerName, EmailAddress
from counts
where num > 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
206541 次 |
| 最近记录: |