SQL Server:抓住DISTINCT列,其余部分

时间:2013-11-07 12:58:00

标签: sql sql-server

假设我想选择不同的Email列,但我也希望该行中的其他列存储在我的对象中。这就是我得到的

SELECT DISTINCT NLMember2.Email
INTO holddups99
FROM NLMember2, holdkey0
WHERE NLMember2.Email = holdkey0.Email

上述查询有效,但只存储电子邮件列。我想用DISTINCT电子邮件条件存储所有列。

我已经被困了一段时间了。

干杯

EDITED

为了进一步澄清,我在NLMember2中获得了ID,电子邮件,姓名,地址..... 我只想将重复的电子邮件存储到holddups99中,但也有其他列,即ID,Name,Address,.....来自NLMember2

1 个答案:

答案 0 :(得分:3)

因此,您希望按Email进行分组,但是您需要告诉我们您希望如何聚合不属于group by子句的其他列。您可以采用最低(MIN)或最高(MAX)值或其他值。

另一种方法是在CTE中使用ROW_NUMBER,我只选择每个电子邮件组的第一行:

WITH CTE AS
(
    SELECT nl.Email, OtherColumns, ... ,
        RN = ROW_NUMBER() OVER (PARTITION BY Email ORDER BY Email ASC)
    FROM dbo.NLMember2 nl INNER JOIN dbo.holdkey0 hk
        ON nl.Email = hk.Email 
)
SELECT * FROM CTE WHERE RN = 1

ROW_NUMBER中修改顺序,以更改要采用的逻辑行。