2 Stimmen

Anzahl der E-Mail-Typen pro Kunden-ID

Ich habe ein Formular, mit dem man E-Mails an unsere Kunden schicken kann. Der Benutzer hat die Möglichkeit, zwischen zwei vorgefertigten Nachrichten zu wählen (Nachricht "1" oder Nachricht "2"). Hinter den Kulissen wird jedes Mal, wenn der Benutzer auf die Schaltfläche "SENDEN" drückt, ein Eintrag in eine Tabelle "RECORDS" vorgenommen (sofern er die Fehlerbehandlung durchläuft).

Nehmen wir an, die Tabelle RECORDS hat 2 Spalten:

CUST_ID  EMAIL_NUM
0000         1
0000         2
0000         1
0000         1
0001         2
0002         1
0002         1
0003         2
0003         2
0003         2

Ich brauche eine Abfrage, die die Einsen und Zweien für jede CUST_ID zählt. Die Ergebnismenge sollte also etwa so aussehen:

CUST_ID  EMAIL_1_COUNT  EMAIL_2_COUNT
0000          3              1
0001          0              1
0002          2              0
0003          0              3

Ich habe count, group bys, havings, while, union, nested selects verwendet, aber wie gesagt, ich bin wahrscheinlich über etwas kompliziert, die relativ einfach ist.

4voto

GolezTrol Punkte 111587
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

1voto

Conrad Frix Punkte 50686

Eine weitere Option ist die Verwendung einer Pivot-Abfrage mit TRANSFORM

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;

Dies würde jedoch zu Spaltenüberschriften von CUST_ID , 1 y 2 . Wenn Sie jedoch eine weitere Tabelle mit den E-Mail-Typen haben, könnte es sich lohnen (vor allem, wenn Sie eine größere Anzahl von E-Mail-Typen als 2 haben).

Die SQL könnte wie folgt aussehen

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;

Erzeugung dieser Ausgabe

   CUST_ID | Work | Home 
   -------   ----   ----
   0000    | 3    | 1
   0001    | 0    | 1
   0002    | 2    | 0
   0003    | 0    | 3

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X