dut*_*pse 1 sql sql-server distinct
我的数据库中有一些重复的邮件,但我无法将其删除.我想选择一些字段,但没有重复的邮件.
我有这样的请求:
SELECT
DISTINCT MAIL,
ID,
CIVILITE,
PRENOM,
NAME
FROM CONTACT WHERE CODE_PAYS = 'DE'
Run Code Online (Sandbox Code Playgroud)
当我启动此请求时,我的邮件重复值已经在这里.
你知道我怎么做的吗?
更新:我尝试过这种方法,但我需要在视图中使用它:
ALTER VIEW ALL_VW_CONTACT_DE WITH SCHEMABINDING
AS
with cte as
(
select rn = row_number() over (partition by c.Mail Order By c.Id asc), c.Mail, c.Id, c.Civilite, c.Prenom, c.Name
from dbo.CONTACT c
where code_pays = 'DE'
)
select Mail, Id, Civilite, Prenom, Name
from cte
where rn = 1
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我得到这个错误:
无法模式绑定视图'MY_TABLE',因为名称'CONTACT'对于模式绑定无效.名称必须采用两部分格式,并且对象不能引用自身
当我启动此请求时,我的邮件重复值已经在这里.
原因是它DISTINCT不像你想象的那样有效.它不仅仅查看DISTINCT关键字后面的第一列,而是比较列表中的所有列.所以,如果一切都是平等的,则认为它是重复的.
一种简单的方法是使用ROW_NUMBER:
with cte as
(
select rn = row_number() over (partition by c.Mail Order By c.Id asc), c.*
from dbo.Contact c
where Code_Pays = 'DE'
)
select Mail, Id, Civilite, Prenom, Name
from cte
where rn = 1
Run Code Online (Sandbox Code Playgroud)
order by如果你想要一个不同的记录,请更改,在这里我拿一个带有min-ID的记录.