SQL使用一个值查找记录

时间:2015-12-01 02:30:19

标签: sql sql-server sql-server-2008-r2

我是SQL的新手,因此我对编码它的限制。此问题与之前的问题类似:SQL Finding Duplicate Values of Rows Where Another Field has a ValueOracle/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

非常感谢提前: - )

2 个答案:

答案 0 :(得分:2)

使用RANK

SQL Fiddle

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
)