SQL-Abfrage mit mehreren Bedingungen

weingummi_99

Benutzer
Beiträge
5
Hallo,
vielleicht kann mit hier jemand helfen.
ich muss eine Tabelle nach der Anzahl, bzw. Proz.Anteil Abfragen. Die Ausgangstabelle hier sehr vereinfacht dargestellt:
Vnr Geschlecht Kind
7893 M J
9948 W N
3847 W N
3492 M N
9458 M J
1236 M J
2459 W J
3489 W N

Jetzt soll abgefragt werden wieviel M, W und Kinder es gibt. Allerdings zählt ein Kind vollwertig und ist somit nicht mehr M oder W. Ich hoffe es wird verständlicher, wenn ich zeige wie das Ergebnis aussehen soll:
Geschlecht Anzahl
M 1
W 3
Kind 4

Bis jetzt benutze ich 2 seperate Abfragen mit jeweils M oder W:
SELECT Geschlecht as maennlich, Count(Geschlecht) AS Anzahl
FROM Tabellenname
WHERE (Geschlecht) Like "M" GROUP BY Geschlecht
UNION SELECT KIND_Kennz as Geschlecht_, Count(KIND_Kennz) AS Anzahl
FROM Tabellenname
WHERE (Geschlecht) Like "M" AND (KIND_Kennz) Like "J" GROUP BY KIND_Kennz;

Danach mach ich geschwind in Excel weiter zieh die Kinder jweils von M und M ab und mach dann eine Gesamttabelle wie oben. Dazu dann noch den Prozentualen Anteil.

Geht das aber nicht in einer Abfrage?
 
Werbung:
Code:
test=*# select * from weingummi ;
 geschlecht | kind
------------+------
 m  | t
 w  | f
 w  | f
 m  | f
 m  | t
 m  | t
 w  | t
 w  | f
(8 Zeilen)

test=*# select count(1) filter (where geschlecht = 'm' and not kind) as maennlich, count(1) filter (where geschlecht='w' and not kind) as weiblich, count(1) filter (where kind) as kind from weingummi ;
 maennlich | weiblich | kind
-----------+----------+------
  1 |  3 |  4
(1 Zeile)

Geht das auch durch? Mit PostgreSQL, falls filter (...) nicht verfügbar mt case when ersetzen.
 
Huch, ich bin da leider noch etwas hemdsärmelig unterwegs und kann wie man oben sieht auch nur gaaaanz einfache Abfragen. Für mich ist die Antwort leider zu speziell ;)
Ich kenn wie gesagt auch nur die einfachen Abfragen in Access mit select/from/where.
Was bedeutet denn hier test? oder das *(ich kenne das als Platzhalter?)
Wär super wenn du es mir ganz einfach erklären könntest
ansonsten muss ich halt mit meinen 2 abfragen und dem späteren Excel-gewurstel leben ;)
 
Das "test=*#" ist nur der Prompt der Datenbank. In etwa mit dem "C:\" oder so, wenn Du eine Dos-Box aufmachst ;-)

Was willst noch wissen?

Grüße aus Fulda.
 
Hi,
filter geht anscheinend nicht, habs dann mit case when probiert. meine Abfrage sieht jetzt so aus:

SELECT count(1)
case when (WHERE Geschlecht = 'M' and not KIND_Kenz='J') as maennlich, count(1) case when (WHERE Geschlecht='W' and not KIND_Kenz='J') as weiblich, count(1) case when (WHERE KIND_Kenz='J') as kind
FROM Tabelle;

dann bringt mir Access einen Fehler:
"Syntaxfehler (fehlender Operator) in Abfrageausdruck 'Count(1) case when (where Geschlecht = 'M' and not KIND_Kenz='J')."

wenn ich mal einfach vermuten darf, dann meckert er weil keine klare Reihenfolge Select/from/where eingehalten wurde? oder aber er kann nix mit Count(1) anfangen.
Ähm ich übrigens auch nicht. Klar weiß ich dass Count einfach nur zusammenzählt, aber in der Abfrage mit (1) konnte ich mir jetzt auch keinen reim machen.

kannst du mir nochmal helfen?
 
Werbung:
Ich hab eine Lösung erhalten! So funtkioniert es: (allerdings sieht die Tabelle anders aus, aber das Ergebnis ist, das was ich wollte)
SELECT COUNT(*) AS G, SUM(Abs(KIND= 'J')) AS K, SUM((KIND= 'N') * (Geschlecht = 'M')) AS M, SUM((KIND= 'N') * (Geschlecht = 'W')) AS W
FROM Tabelle;
union
SELECT 'proz. Aufteilung' AS G,
(SUM(Abs(KIND = 'J')))/(select count(VNR) From Tabelle),
(SUM((KIND = 'N') * (Geschlecht = 'M')))/(select count(VNR) From Tabelle),
(SUM((KIND = 'N') * (Geschlecht = 'W')))/(select count(VNR) Tabelle)
FROM Tabelle;

Lieber Akretschmer, vielen Dank, dass du versucht hast mir zu helfen! ;)
 
Zurück
Oben