April 21, 2021, 16:10:21

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


Access, SQL, Abfrage mit ineinander greifenden Bedingungen

Begonnen von weingummi, Februar 01, 2017, 12:54:43

⏪ vorheriges - nächstes ⏩

weingummi

Hallo,
ich suche Hilfe! 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 Proz.Anteil
M                1           12,5%
W                3           37,5%
Kind            4           50,0%

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 jeweils von M und W ab und mach dann eine Gesamttabelle wie oben. Dazu dann noch den prozentualen Anteil.

Geht das aber nicht in einer Abfrage?

ebs17

Wenn Dir die Ergebnisse in einer Zeile behagen (Prozente kannst Du selber ergänzen):
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
   EineTabelle
Mit freundlichem Glück Auf!

Eberhard

weingummi

 ;D
WOW! Vielen Dank funktioniert!
Kleine Frage zum Verständnis, ich dachte eine Abfrage besteht immer aus select/from/where, hier fehlt das where. Wieso funktioniert es aber trotzdem?
Ich versuch mich mal an die prozentuale Austeilung...
funktioniert! So:
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(VSNR) From Tabelle),
(SUM((KIND = 'N') * (Geschlecht = 'M')))/(select count(VSNR) From Tabelle),
(SUM((KIND = 'N') * (Geschlecht = 'W')))/(select count(VSNR) Tabelle)
FROM Tabelle;

ist jetzt nicht so schön, dass in der spalte G (für Gesamt?) jetzt proz. Aufteilung steht und nicht 100% aber das ist doch schon mal super!!!

vielen vielen Dank!!!!!!!

MzKlMu

Februar 02, 2017, 11:22:54 #3 Letzte Bearbeitung: Februar 02, 2017, 11:31:10 von MzKlMu
Hallo,
Zitatich dachte eine Abfrage besteht immer aus select/from/where
das Wort immer ist hier fehl am Platz. Außerdem fehlt hier die Angabe der Felder.
Where ist optional. Das ist ja ein Kriterium das die Datensatzzahl einschränkt und das kann erforderlich sein oder auch nicht.
Also so:
Select Feldname(n) From TabellenName [Where]
[Optional]. Es gibt noch mehr optionale Parameter.
Gruß
Klaus

weingummi

Ahh, ok, deshalb hatte ich so Probleme mit der Auswertung, da ich mich mit Where immer "eingeschränkt" hatte.

Super, vielen Dank für eure Hilfe!


ebs17

Zitatist jetzt nicht so schön, dass in der spalte G (für Gesamt?) jetzt proz. Aufteilung steht und nicht 100%

Dann schreib etwas anderes rein als diesen Text, z.B. 1

Zitathier fehlt das where

WHERE leitet einen Filter ein. Wenn man aber alle Datensätze sehen/verarbeiten will und nicht nur ein paar ausgewählte, wäre ein Filter ziemlich doof, oder ...
Mit freundlichem Glück Auf!

Eberhard