J'ai deux tables dans une base de données SQL Server, une avec deux colonnes et une avec quatre:
tbl_email_list
email_list_id
int
(PK)email_list_name
varchar
tbl_email-details
email_uniq_id
int
(PK)email_list_id
int
(FK)email_address
varchar
blacklist
bit
Je veux récupérer des données dans une requête qui devrait retourner
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;
En comptant les choses qui peuvent être nulles, nous laissons les zéros apparaître dans le jeu de résultats, ce qui est une technique très utile. Ici, je le fais pour les résultats de la liste noire et pour l'ensemble (basé sur la jointure externe).
Essayez quelque chose comme ceci:
SELECT
el.emali_list_name AS EmailList
,COUNT(*) AS EmailsCount
,SUM(CASE WHEN ed.blacklist = 1 THEN 1 ELSE 0 END) AS BlackList4ListCouint
,SUM(CASE WHEN ed.blacklist = 0 THEN 1 ELSE 0 END) AS WhiteList4ListCouint
FROM [tbl_email_list] AS el LEFT JOIN [tbl_email-details] AS ed ON (el.email_list_id = ed.email_list_id)
GROUP BY el.emali_list_name
ORDER BY EmailList;
Veuillez vérifier si la requête donne des résultats corrects.
Je suppose que vous n'avez pas 2 e-mails égaux dans la même liste. Sinon, dans certains cas, les calculs ne seront pas corrects.