TSQL计数空值-其中所有分组项都有空字段

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

我只是想了解一下所需的逻辑/命令:

我有一张联系人表。每个联系人都有一个多对一的客户机。 我正在尝试获取所有联系人的电子邮件都为空的ClientID

示例数据:

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)