选择没有重复的行

时间:2020-02-23 20:46:33

标签: sql sql-server

我只想选择唯一的行,而不要重复。在这种情况下,我只希望返回4行。如何删除重复项?

SELECT 
    d.FirstName, d.LastName, d.DateOfBirth, d.Gender, d.SSN, d.Gender, d.Race, 
    d.HobbyInterest, d.PhysicalDescription, pf.[No of Religious Donations]
FROM  
    (SELECT 
         pf.*, 
         COUNT(Religious) OVER (PARTITION BY Person_Id) as 'No of Religious Donations'
     FROM 
         vw_profileFact pf) pf
JOIN 
    vw_dossier d ON pf.Person_Id = d.Person_Id
WHERE 
    [No of Religious Donations] > 2
ORDER BY 
    [No of Religious Donations] DESC;

enter image description here

2 个答案:

答案 0 :(得分:2)

我有点困惑。为什么要使用窗口功能?

SELECT d.*, pf.num_religious_donations
FROM vw_dossier d JOIN
     (SELECT p.person_id,
             COUNT(p.Religious) AS num_religious_donations
      FROM vw_profileFact p
      GROUP BY p.person_id
     ) pf
     ON pf.Person_Id = d.Person_Id
WHERE num_religious_donations> 2
ORDER BY pf.num_religious_donations DESC;

如果您希望每人 排一行,那么聚合是合适的。

答案 1 :(得分:0)

SELECT DISTINCT d.FirstName, d.LastName, d.DateOfBirth, d.Gender, d.SSN, d.Gender, d.Race, d.HobbyInterest, 
d.PhysicalDescription, pf.[No_of_Rel_Donations]
FROM (SELECT pf.*, COUNT(Religious) OVER (PARTITION BY Person_Id) as No_of_Rel_Donations
      FROM vw_profileFact pf
     ) pf
JOIN vw_dossier d 
ON pf.Person_Id = d.Person_Id
WHERE [No of Religious Donations] > 2
ORDER BY [No of Religious Donations] DESC;