count
klerafukan
- datenbank
0 Ilja0 klerafukan2 Ilja0 klerafukan0 Ilja
Hallo!
Ich arbeite auf Access2003 und stehe vor folgendem Problem:
Ich habe eine Tabelle die ein Feld Status beinhaltet.
Jetzt soll ich einer Abfrage alle zählen, die Status1 haben, alle die Status2 haben...
Wie kann ich solche counts schachteln?
Vielen Dank!
Til
yo,
Jetzt soll ich einer Abfrage alle zählen, die Status1 haben, alle die Status2 haben...
Wie kann ich solche counts schachteln?
mit einer gruppierung über die spalte status:
SELECT status, COUNT(*) Anzahl
FROM tabelle
GROUP BY status
;
Ilja
Hallo Ilja,
das Problem ist, dass ich mit den Werten innerhalb SQL noch "weiterrechnen" will.
Also im Klartext, ist habe Status: "erfüllt", "entfällt" und "offen".
Ich will jetzt in einer SQL Abfrage die Formel:
Sum(erfüllt) / (Sum(alle) - sum(enfällt)).
yo,
Jetzt soll ich einer Abfrage alle zählen, die Status1 haben, alle die Status2 haben...
Wie kann ich solche counts schachteln?
mit einer gruppierung über die spalte status:
SELECT status, COUNT(*) Anzahl
FROM tabelle
GROUP BY status
;Ilja
yo,
Sum(erfüllt) / (Sum(alle) - sum(enfällt)).
in diesem fall ist die sachlage ein wenig anders. wenn es dir nur um die Summen geht, kannst du am besten mit CASE arbeiten, wobei ich noch mal auf "punkt vor strichrechnung" hinweisen will.
SELECT SUM(CASE
WHEN t.status = 'erfüllt'
THEN t.Spalte_wo_die_werte_zur_aufsummierung_drinne_steht
ELSE 0
END
) /
SUM(t.Spalte_wo_die_werte_zur_aufsummierung_drinne_steht) -
SUM(CASE
WHEN t.status = 'entfällt'
THEN t.Spalte_wo_die_werte_zur_aufsummierung_drinne_steht
ELSE 0
END
) Ergebnis
FROM tabelle t
;
Ilja
Hallo Ilja,
vielen Dank, das sieht doch schon gut aus.
Ich studiere zwar Informatik und habe auch schon viel mit SQL gearbeitet, aber diese CASE Sachen kenne ich nur aus Java.
Wie ist denn da die generelle Syntax? Er will irgendeinen Operator noch haben (habe ich erwähnt, dass ich auch Access 2003 arbeite?)
Dann noch eine Frage zu dem "t.Spalte_wo_die_werte_zur_aufsummierung_drinne_steht":
Ist das eine Tabellenspalte, die ich anlegen muß? Oder wie ist das gemeint?
also nehmen wir mal an, meine Tabelle sieht so aus:
+----------------------+
| Forderung | Status |
+----------------------+
| grün | erfüllt |
| rot | offen |
| blau | offen |
| gelb | entfällt|
| türkis | erfüllt |
| orange | entfällt|
+----------------------+
Dann will ich haben :
erfüllt (2) / (alle (6) - entfällt (2))
(Also siehe Klammerung, die Substraktion zuerst)
= 1/2 oder 0,5
Das soll das Ergebnis sein.
Grüße
yo,
Sum(erfüllt) / (Sum(alle) - sum(enfällt)).
in diesem fall ist die sachlage ein wenig anders. wenn es dir nur um die Summen geht, kannst du am besten mit CASE arbeiten, wobei ich noch mal auf "punkt vor strichrechnung" hinweisen will.
SELECT SUM(CASE
WHEN t.status = 'erfüllt'
THEN t.Spalte_wo_die_werte_zur_aufsummierung_drinne_steht
ELSE 0
END
) /
SUM(t.Spalte_wo_die_werte_zur_aufsummierung_drinne_steht) -
SUM(CASE
WHEN t.status = 'entfällt'
THEN t.Spalte_wo_die_werte_zur_aufsummierung_drinne_steht
ELSE 0
END
) Ergebnis
FROM tabelle t
;Ilja
yo,
Dann noch eine Frage zu dem "t.Spalte_wo_die_werte_zur_aufsummierung_drinne_steht":
Ist das eine Tabellenspalte, die ich anlegen muß? Oder wie ist das gemeint?
es war eine vermutung von mir, dass es eine solche spalte gibt, weil du die Aggregat-funktion SUM anstellte von COUNT verwendet hast. die statuswerte lassen sich aber nicht summieren, da es sich um strings handelt. insofern habe ich darauf geschlossen, du hast noch solch eine spalte. dem scheint aber nicht so zu sein, dann benutze einfach wieder COUNT und ändere die CASE anweisung entsprechend mit NULL.
SELECT COUNT(CASE
WHEN t.status = 'erfüllt'
THEN t.status
ELSE NULL
END
) /
SUM(t.status) -
SUM(CASE
WHEN t.status = 'entfällt'
THEN t.status
ELSE NULL
END
) Ergebnis
FROM tabelle t
;
Ilja