Comptez le type de messagerie par identifiant client
Question
J'ai un formulaire que les gens peuvent utiliser pour envoyer des e-mails à nos clients. L'utilisateur a une option pour sélectionner entre deux messages en conserve (message "1" ou message "2"). Dans les coulisses, chaque fois qu'ils appuyent sur le bouton "Envoyer", il se connecte dans une table "Enregistrements" (tant qu'il le fait via les gestionnaires d'erreurs).
Prétendons que le tableau des enregistrements a 2 colonnes:
CUST_ID EMAIL_NUM
0000 1
0000 2
0000 1
0000 1
0001 2
0002 1
0002 1
0003 2
0003 2
0003 2
J'ai besoin d'une requête qui compte celles et deux pour chaque cust_id. L'ensemble de résultats devrait donc ressembler à ceci:
CUST_ID EMAIL_1_COUNT EMAIL_2_COUNT
0000 3 1
0001 0 1
0002 2 0
0003 0 3
J'ai utilisé le nombre, le groupe BYS, les cceaux, tandis que l'union, les sélections imbriquées, mais comme je l'ai dit, je complique probablement quelque chose qui est relativement facile.
La solution
select
CUST_ID,
sum(iif(EMAIL_NUM = 1, 1, 0)) as EMAIL_1_COUNT,
sum(iif(EMAIL_NUM = 2, 1, 0)) as EMAIL_2_COUNT
from
RECORDS
group by
CUST_ID
Autres conseils
Une autre option à considérer est d'utiliser une requête de pivot avec transformée
TRANSFORM NZ(Count(RECORDS.Email_NUm),0) AS CountOfEmail_NUm
SELECT RECORDS.CUST_ID
FROM RECORDS
GROUP BY RECORDS.CUST_ID
PIVOT RECORDS.Email_NUm;
Cela produirait cependant des têtes de colonne de CUST_ID
, 1
, et 2
. Cependant, si vous aviez une autre table avec les types de messagerie, cela pourrait être utile (surtout si vous aviez un grand nombre de types de messagerie que 2)
Le SQL pourrait ressembler à ça
TRANSFORM NZ(Count(r.Email_NUm),0) AS CountOfEmail_NUm
SELECT r.CUST_ID
FROM RECORDS r
INNER JOIN EMAIL_TYPES et
ON r.Email_NUm = et.Email_NUm
GROUP BY r.CUST_ID
PIVOT et.TYPE_NAME;
Produire cette sortie
CUST_ID | Work | Home
------- ---- ----
0000 | 3 | 1
0001 | 0 | 1
0002 | 2 | 0
0003 | 0 | 3