如何为同一 ID 查找除 null 以外的唯一行?

How to find unique row other than null for the same ID?

我有下面的 table 数据,其中包含状态列为空和 'Y' ID

Id      Name    Status
1394    Test 1  Y
1394    Test 2  null    
1394    Test 3  null    
1395    Test 4  Y
1395    Test 5  Y
1396    test 6  null

ID 1394 包含 nullY。 如果 ID 包含 Null 那么我不应该得到 ID.

在这种情况下,我应该只得到 1395,因为特定的 ID 不包含 null 值。

您可以使用 not exists:

select t.*
from t
where not exists (select 1
                  from t t2
                  where t2.id = t.id and t2.status is null
                 );

我会在这里使用聚合方法:

SELECT Id
FROM yourTable
GROUP BY id
HAVING COUNT(CASE WHEN Status IS NULL THEN 1 END) = 0;

HAVING 子句中使用条件聚合:

SELECT Id, MAX(Status) Status
FROM tablename
GROUP By Id
HAVING SUM(CASE WHEN Status IS NULL THEN 1 ELSE 0 END) = 0

或者如果你想要所有的行和列使用 NOT IN:

SELECT *
FROM tablename
WHERE Id NOT IN (SELECT Id FROM tablename WHERE Status IS NULL)

还有一个选项:

SELECT Id from tablename
EXCEPT 
SELECT Id FROM tablename WHERE Status IS NULL;

第一条语句获取所有ID值的集合。第二个获取 Status 为 NULL 的所有 ID 值的集合。 EXCEPT 从第一组中删除第二组以及重复项。请注意,没有 ORDER BY 子句,因此不要假设行具有已定义的顺序。 Fiddle