SQL查询-查找所有空值
我有下表,其中包含Usename和站点信息:SQL查询-查找所有空值,sql,tsql,Sql,Tsql,我有下表,其中包含Usename和站点信息: Username Site jbrown NULL jbrown NULL jbrown NULL msmith 3 msmith 12 msmith NULL ptodd 18 ptodd 16 ptodd NULL jdrem 3 jdrem NULL jdrem NULL 我需要做的是获取用户名,这些用户名对于他们的站点或者任何
Username Site
jbrown NULL
jbrown NULL
jbrown NULL
msmith 3
msmith 12
msmith NULL
ptodd 18
ptodd 16
ptodd NULL
jdrem 3
jdrem NULL
jdrem NULL
我需要做的是获取用户名,这些用户名对于他们的站点或者任何站点都是空的。因此,在这种情况下,输出为:
jbrown
msmith
jdrem
请注意,ptodd不是最终结果,因为他们的站点没有3个
我正在考虑一个分组,但不确定如何根据用户名说出所有空值或任何3 您可以使用
分组依据和条件聚合
select username
from tablename
group by username
having count(*)=count(case when site is null then 1 end)
or count(case when site=3 then 1 end)>=1
您可以使用分组依据和条件聚合
select username
from tablename
group by username
having count(*)=count(case when site is null then 1 end)
or count(case when site=3 then 1 end)>=1
条件聚合可能会更快,但这里有另一个选项:
使用不存在(…)或站点=3
:
select distinct Username
from t
where not exists (
select 1
from t as i
where i.username = t.username
and i.site is not null
)
or Site = 3
条件聚合可能会更快,但这里有另一个选项:
使用不存在(…)或站点=3
:
select distinct Username
from t
where not exists (
select 1
from t as i
where i.username = t.username
and i.site is not null
)
or Site = 3
我喜欢使用我称之为“优于”的sql主体。确保没有比这更好的东西
选择用户名、站点
来自表\u name t
左联接表\u betterThan.site上的betterThan名称不为null,betterThan.username=t.username和betterThan.id t.id
其中(t.site为null或t.site=3)且betterThan.id为null;
我喜欢使用我称之为“优于”的sql主体。确保没有比这更好的东西
选择用户名、站点
来自表\u name t
左联接表\u betterThan.site上的betterThan名称不为null,betterThan.username=t.username和betterThan.id t.id
其中(t.site为null或t.site=3)且betterThan.id为null;
我想这可能与其他类似,无法计算,但是
SELECT [Username]
FROM Table
GROUP BY [Username]
HAVING MAX([Site]) IS NULL OR
COUNT(CASE WHEN [Site] = 3 THEN 1 END) > 0
我想这可能和其他的太相似了,无法计算,但是
SELECT [Username]
FROM Table
GROUP BY [Username]
HAVING MAX([Site]) IS NULL OR
COUNT(CASE WHEN [Site] = 3 THEN 1 END) > 0
非常感谢。如果某个用户名的所有值都为null,那么MAX是如何工作的,从而为给定的用户名提取所有null的。。然后MAX([Site])为空
返回true。。OR条件处理您的其他要求任何3号站点都可以满足的要求
谢谢。如果某个用户名的所有值都为null,那么MAX是如何工作的,从而为给定的用户名提取所有null的。。然后MAX([Site])为空
返回true。。OR条件处理您的其他要求任何3
Hi Vkp的站点,谢谢您的回复。似乎有效。我有一个问题是,对于用户名集,您编写的代码如何为所有null选择?我看到了site=3的情况,但没有看到jbrown对所有空值的情况。请记住,对于给定的用户,它可能是空的,13、14,在这种情况下,它是空的,但不是所有都是空的。@NatePetcount(*)
是每个用户的总行数,count(如果站点为null,则为1结束)
统计每个用户的所有null
值(计数时忽略所有其他值)…如果它们相等,则表示用户具有站点的所有null值。如果用户有NULL,13,14 count(*)=3,NULL count=1..第一个条件失败..而且用户没有站点=3行..因此第二个条件也失败。因此将无法检索该用户。您好,Vkp,感谢您的回复。似乎有效。我的一个问题是,对于用户名集,您编写的代码如何选择所有空值?我看到了site=3的情况,但没有看到jbrown对所有空值的情况。请记住,对于给定的用户,它可能是空的,13、14,在这种情况下,它是空的,但不是所有都是空的。@NatePetcount(*)
是每个用户的总行数,count(如果站点为null,则为1结束)
统计每个用户的所有null
值(计数时忽略所有其他值)…如果它们相等,则表示用户具有站点的所有null值。如果用户有NULL,13,14 count(*)=3,NULL count=1..第一个条件失败..而且用户没有站点=3行..因此第二个条件也失败。因此,将无法检索该用户。