PDA

View Full Version : SQL verschiedene Werte zählen



Domeus
15-06-21, 10:06
Hallo,
ich habe eine Datei mit einem Datumfeld und einem weiteren Feld das verschiedene Werte enthalten kann. Zum Beispiel so:

<tbody>
20210615
ABC1


20210615
ABC2


20210615
ABC1


20210615
ABC3


20210614
ABC1


20210614
ABC4

</tbody>

Nun möchte ich die Anzahl der verschiedenen Werte in Spalte 2 zu dem jeweiligen Datum zählen. In dem einfach Beispiel oben sehe das dann so aus:

<tbody>
Datum
ABC1
ABC2
ABC3
ABC4


20210615
2
1
1
0


20210614
1
0
0
1

</tbody>

Wie kann ich das im SQL Code umsetzen? Die Werte aus Spalte 2 sind übrigens bekannt und endlich. Und ich brauche das ganze unbedingt in einem einzigen SQL-Befehl.

Danke schonmal und Gruß
Domeus

Fuerchau
15-06-21, 10:30
simple:

count(nullif(feld, 'ABC1')) ABC1Count
,count(nullif(feld, 'ABC2')) ABC2Count

Domeus
15-06-21, 10:45
Super vielen, vielen Dank :)

Fuerchau
15-06-21, 11:51
Wenn du auch noch 0 stall Null sehen möchtest, packe den Count noch in ein
coalesce(count(....), 0) name

Domeus
15-06-21, 12:35
simple:

count(nullif(feld, 'ABC1')) ABC1Count
,count(nullif(feld, 'ABC2')) ABC2Count

MUss doch nochmal nachfragen. Bei mir setzt er hiermit zwar die entsprechenden Felder auf NULL aber zählt trotzdem alle Felder und nicht nur die die NULL sind.

EDIT: Habe gerade gemerkt, dass dann ja die NULL Felder beim count nicht mitzählen. Heisst wenn ich count(*) - count(nullif(feld, 'ABC1')) ABC1Count machen würde hätte ich wohl das was ich brauche. Geht das auch nur mit einem Befehl oder muss ich immer so rechnen?

Fuerchau
15-06-21, 15:37
Du hast ja gesagt, du willst die Anzahl der verschienden Werte und nicht die Differenz zur Gesamtanzahl zählen.
Das Rechnen kannst du so machen, allerdings geht auch das einfacher.
Der Nulliff() entspricht ja einem case-Ausdruck. Du kannst also beliebige Case-Ausdrücke verwenden um etwas zu zählen oder zu summieren.

count(case when feld <> 'ABC1' then feld else null end) <= liefert NULL wenn nur ABC1 vorhanden.
sum(case when feld <> 'ABC1' then 1 else 0 end) <= liefert 0 wenn nur ABC1 vorhanden.

Case-Ausdrücke kannst du an allen Stellen verwenden, sogar im Join on als auch im Where, Group oder Having.