TSQL Counting Nulls - 所有分组项都具有NULL字段

kra*_*s88 3 sql t-sql sql-server

试着围绕所需的逻辑/命令:

我有一个联系人表.每个联系人都以多对一的方式拥有一个客户.我试图得到任何所有联系人都有电子邮件的NULL值的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
Run Code Online (Sandbox Code Playgroud)

谢谢!

Stu*_*tLC 7

您可以使用分组聚合和HAVING子句执行此操作(并假设空白电子邮件地址可以与空值相同):

SELECT 
    ClientID
    FROM ClientEmails
    GROUP BY ClientID
    HAVING MAX(LEN(ISNULL(EmailAddress, ''))) = 0;
Run Code Online (Sandbox Code Playgroud)

SqlFiddle

  • HAVING是ANSI.`ISNULL`和`LEN`不是 - `COALESCE`比`ISNULL`更便携(并且存在其他替代方案,例如Oracle有NVL).大多数DB都具有"LEN"的等价物,例如"LENGTH".你的查询很好 - 除了NULL之外的`COUNT(x)`似乎是[标准行为](http://my.safaribooksonline.com/book/databases/sql/0596004818/4dot2dot-ansi-sql-aggregate-functions/id3752538 ) (2认同)

Bor*_*yev 7

这会有帮助吗?

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)
Run Code Online (Sandbox Code Playgroud)