Reputation: 121
I want to select only unique rows, without duplicates. In this case, I only want 4 rows returned. How can I remove the duplicates?
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;
Upvotes: 0
Views: 178
Reputation: 1270993
I'm a little confused. Why are you using window functions?
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;
If you want one row per person, then aggregation is appropriate.
Upvotes: 2
Reputation: 296
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;
Upvotes: 0