如何为同一 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
包含 null
和 Y
。
如果 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
我有下面的 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
包含 null
和 Y
。
如果 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