连接两个表并在单个查询中返回数据和计数

Tuf*_*and 6 join sql-server count

我在 SQL Server 数据库中有两张表,一张有两列,一张有四列:

  1. tbl_email_list

    1. email_list_id int (PK)
    2. email_list_name varchar
  2. tbl_email-details

    1. email_uniq_id int (PK)
    2. email_list_id int (FK)
    3. email_address varchar
    4. blacklist bit

我想在一个应该返回的查询中检索数据

  1. 来自 tbl_email_list 的所有电子邮件列表;
  2. 与特定 email_list_id 关联的 email_address 总数;
  3. 列入白名单的电子邮件地址总数(其中黑名单=0);
  4. 列入黑名单的电子邮件地址总数(其中 blacklist=1)。

Rob*_*ley 7

select l.email_list_id, l.email_list_name,
    count(d.email_uniq_id) as full_count,
    count(case when d.blacklist = 0 then d.email_uniq_id end) as white_count,
    count(case when d.blacklist = 1 then d.email_uniq_id end) as black_count
from tbl_email_list as l
left join [tbl_email-details] as d on d.email_list_id = l.email_list_id
group by l.email_list_id, l.email_list_name;
Run Code Online (Sandbox Code Playgroud)

通过对可以为空的事物进行计数,我们让结果集中出现零,这是一项非常有用的技术。在这里,我对黑名单结果和整体(基于外连接)都进行了操作。