Conta il tipo di email per ID cliente
Domanda
Ho un modulo che le persone possono utilizzare per inviare e-mail ai nostri clienti.L'utente ha un'opzione per selezionare tra due messaggi in scatola (messaggio "1" o un messaggio "2").Dietro le quinte, ogni volta che colpiscono il pulsante "Invia", accede a una tabella "Records" (fino a quando lo rende attraverso i gestori di errore).
Facciamo finta la tabella dei record ha 2 colonne:
CUST_ID EMAIL_NUM
0000 1
0000 2
0000 1
0000 1
0001 2
0002 1
0002 1
0003 2
0003 2
0003 2
.
Ho bisogno di una query che conta quelle e due per ogni cust_id.Quindi il set di risultati dovrebbe essere simile a questo:
CUST_ID EMAIL_1_COUNT EMAIL_2_COUNT
0000 3 1
0001 0 1
0002 2 0
0003 0 3
.
Ho usato il conteggio, il gruppo Bys, Haves, mentre, unione, si seleziona, ma come ho detto, probabilmente sto complicando qualcosa che è relativamente facile.
Soluzione
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
. Altri suggerimenti
Un'altra opzione da considerare è utilizzare una query per pivot con trasformazione
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;
.
Ciò produrrebbe tuttavia teste di colonna di generatori CUST_ID
, 1
e 2
.Tuttavia, se hai avuto un altro tavolo con i tipi di posta elettronica, potrebbe essere utile (specialmente se avessi un gran numero di tipi di posta elettronica di 2)
L'SQL potrebbe assomigliare a questo
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;
.
Produzione di questa uscita
CUST_ID | Work | Home
------- ---- ----
0000 | 3 | 1
0001 | 0 | 1
0002 | 2 | 0
0003 | 0 | 3
.