Sql 不显示同一Id包含null的Id?
我有一个下表数据,其中包含ID为null和Y的状态列Sql 不显示同一Id包含null的Id?,sql,sql-server,tsql,sql-server-2008,rdms,Sql,Sql Server,Tsql,Sql Server 2008,Rdms,我有一个下表数据,其中包含ID为null和Y的状态列 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 ID1394包含null和Y。 如果ID包含Null,则我不应获取该ID 在这种情况下,我应该只获取1395,因为特定的ID不包含null值 您可以
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
ID1394
包含null
和Y
。
如果ID
包含Null
,则我不应获取该ID
在这种情况下,我应该只获取1395
,因为特定的ID
不包含null
值
您可以使用
不存在:
select t.*
from t
where not exists (select 1
from t t2
where t2.id = t.id and t2.status is null
);
我将在这里使用聚合方法:
选择Id
从你的桌子上
按id分组
有计数(状态为空时,则1结束)=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
或者,如果希望所有行和列不在中使用:
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值的集合。第二个获取状态为NULL的所有ID值的集合。Exception从第一个集合中删除第二个集合以及重复的集合。请注意,没有ORDERBY子句,因此不要假定行具有已定义的顺序 这是成功的。如果我的行包含10万个data@sampathacharya这是过早的优化吗?先试试看。还是你的问题只是你实际问题的开始?@SMor好的,我会努力得到结果。谢谢you@sampathacharya . . . 奇怪的是,你没有接受这个答案,因为在(id,status)
上有一个索引,这会有最好的性能。