TSQL计数空值-其中所有分组项都有空字段
我只是想了解一下所需的逻辑/命令: 我有一张联系人表。每个联系人都有一个多对一的客户机。 我正在尝试获取所有联系人的电子邮件都为空的ClientID 示例数据:TSQL计数空值-其中所有分组项都有空字段,sql,sql-server,tsql,Sql,Sql Server,Tsql,我只是想了解一下所需的逻辑/命令: 我有一张联系人表。每个联系人都有一个多对一的客户机。 我正在尝试获取所有联系人的电子邮件都为空的ClientID 示例数据: ContactID EmailAddress ClientID 1 NULL 3 907 NULL 3 2468 NULL 3 2469 email@email.com
ContactID EmailAddress ClientID
1 NULL 3
907 NULL 3
2468 NULL 3
2469 email@email.com 4
1077 NULL 4
908 email@email.com 4
2 email@email.com 4
3 email@email.com 5
909 email@email.com 5
谢谢 请尝试:
SELECT
ClientID
FROM(
SELECT
ClientID,
SUM(CASE WHEN EmailAddress IS NULL THEN 1 ELSE 0 END) a,
COUNT(*) b
FROM YourTable
GROUP BY ClientID
)x WHERE a=b
您可以使用分组聚合和子句来实现这一点(假设空白电子邮件地址可以被视为空): 这有帮助吗
select *
from
(
select clientId,
COUNT(emailAddress) as Mailz,
COUNT(contactId) as Contacts
from contacts
group by clientId
) as src
where (Mailz = 0 and contacts > 0)
那么对于上面的例子3,答案是正确的吗?相关的问题-很好。这个数据库是不可知的吗?另外,你能告诉我我的问题是否也可以。非常感谢。chenqui.HAVING是ANSI
ISNULL
和LEN
不是-COALESCE
比ISNULL
更便于移植(还有其他替代方案,例如Oracle有NVL)。大多数数据库都具有与LEN
等效的属性,例如LENGTH
。您的查询很好-COUNT(x)
排除空值似乎可以在没有子查询的情况下完成,只需在having
子句中过滤它,例如having COUNT(*)=SUM(当EmailAddress为空时,则为1,否则为0结束)
您还可以详细说明一下吗?
select *
from
(
select clientId,
COUNT(emailAddress) as Mailz,
COUNT(contactId) as Contacts
from contacts
group by clientId
) as src
where (Mailz = 0 and contacts > 0)