2

目标:使用SqlServer 2005,选择多个列,但确保1个特定列不重复

问题:以下代码不会删除重复项。有重复的字段是电子邮件。

SELECT DISTINCT 
           email,
           name,
           phone
FROM
    database.dbo.table
WHERE
    status = 'active'
GROUP BY
    email,
    name,
    phone

提前感谢您的任何意见、建议或建议。

4

2 回答 2

2

它会删除重复的电子邮件,但您必须决定您需要的名称和电话。结果基于姓名、电话排序顺序。

WITH cl
as
(
SELECT email, name, phone, ROW_NUMBER() OVER(PARTITION BY email ORDER BY name, phone) rn
FROM
    database.dbo.table
WHERE
    status = 'active')

select *
from cl
where rn =1  
于 2013-09-26T17:10:48.603 回答
1

这是一种方法

DECLARE @Table AS TABLE
(email NVARCHAR(100), name NVARCHAR(100), phone NVARCHAR(100))

INSERT INTO @Table
        ( email , name , phone)
VALUES  ( N'fred', -- email  - nvarchar(100)
          N'bob', -- name - nvarchar(100)
          N'steve'  -- phone- nvarchar(100)
          )

          INSERT INTO @Table
        ( email , name , phone)
VALUES  ( N'fred', -- email - nvarchar(100)
          N'bob2', -- name - nvarchar(100)
          N'ste1ve'  -- phone- nvarchar(100)
          )

          INSERT INTO @Table
        ( email , name , phone)
VALUES  ( N'fred1', -- email - nvarchar(100)
          N'bob3', -- name - nvarchar(100)
          N'steve3'  -- phone- nvarchar(100)
          )


          SELECT email , MAX(name ) c2, MAX(col3) c3 FROM @Table GROUP BY email 
于 2013-09-26T17:06:26.227 回答