我是SQL的新手,因此我对编码它的限制。此问题与之前的问题类似:SQL Finding Duplicate Values of Rows Where Another Field has a Value和Oracle/SQL - Finding records with one value excluding nulls
我需要一个语句来查找 PersonID 的所有重复值,如果这些行中至少有一个或多个在 CodeID 上有值。它还会找到 PersonID ,即使 CodeID 为空,但没有 PersonID 重复。
PersonID CodeID
----------------
Alvin 2
Simon 4
Simon null
Theodore null
Dave 1
Ian 2
Ian null
Clare null
Gale 3
Gale 5
期望的结果:
PersonID CodeID
----------------
Alvin 2
Simon 4
Theodore null
Dave 1
Ian 2
Clare null
Gale 3
Gale 5
非常感谢提前: - )
答案 0 :(得分:2)
使用RANK
:
SELECT
PersonID, CodeID
FROM (
SELECT *,
RN = DENSE_RANK() OVER(PARTITION BY PersonID ORDER BY CASE WHEN CodeID IS NULL THEN 1 ELSE 0 END)
FROM tbl
) t
WHERE RN = 1
答案 1 :(得分:0)
以下是如何在不使用分析函数的情况下解决此问题,如果这些不适合您的话。
select PersonID, CodeID
from T
where CodeID is not null or PersonID in (
select PersonID
from T
group by PersonID
having min(CodeID) is null
)