SQL Abfrage PLZ-Leitgebiete zählen

stahlprinzessin

Grünschnabel
Hallo,

ich habe eine LibreOffice Datenbank und muss für eine Statistik im Postversand alle Postleitzahlen und Leitgebiete herausfinden, die öfter als 20 Mal vorhanden sind.
Das ist ansich kein Problem und ich habe es mit COUNT gelöst

SQL:
 SELECT "Alle Daten"."PLZ", COUNT( "PLZ" ) FROM "Alle Daten" "Alle Daten" WHERE ( "Alle Daten"."Status" = 'aktiv' AND "Alle Daten"."nicht beschicken" IS NULL AND "Alle Daten"."Land" IS NULL ) GROUP BY "PLZ" HAVING COUNT( * ) > 19

Allerdings gibt es (außerhalb von Wien) Leitgebiete, dh. zb die PLZ 4060 und 4074 sind ein Leitgebiet - also alles was mit 40 (60, 50 etc) beginnt, ist ein Leitgebiet.
Wie kann ich die Abfrage so gestalten, dass für Wien (PLZ 1010-1230) gezählt wird, wenn die ganze PLZ gleich ist, für alle anderen PLZ-Bereiche, wenn nur die ersten beiden Stellen der (vierstelligen) PLZ gleich sind?
Ist das möglich?
Ist verständlich, was ich mein?

Liebe Grüße,
jopa
 
Hab noch nie mit BASE gearbeitet. Aber etwa so sollte es gehen (... muss noch ersetzt werden)
SQL:
SELECT
    CASE
        WHEN LEFT(plz, 1) = 1
        THEN plz
        ELSE CONCATE(LEFT(plz, 2) , '00')
    END AS leitgebiet,
    COUNT(*) AS cnt
FROM  ...
WHERE ...
GROUP BY
    CASE
        WHEN LEFT(plz, 1) = 1
        THEN plz
        ELSE LEFT(plz, 2)
    END
 
Hallo, Yaslwa,
danke, dass du dich meier Frage annimmst!

Erst kam ein Syntaxfehler, habe es nun angepasst:

SQL:
SELECT
    CASE
        WHEN LEFT("PLZ", 1) = 1
        THEN "PLZ"
        ELSE CONCAT(LEFT("PLZ", 2) , 'xx')
    END AS Leitgebiet,
    COUNT(*) AS Anzahl
FROM "Alle Daten" "Alle Daten"
WHERE ( "Alle Daten"."Status" = 'aktiv' AND "Alle Daten"."nicht beschicken" IS NULL AND "Alle Daten"."Land" IS NULL )
GROUP BY
"PLZ" HAVING COUNT( * ) > 19

Allerdings stimmt das Ergebnis nicht ganz - zb bei dem Leitgebiet 80xx werden 23 gezählt - habe es überprüft - 23 sind nur jene mit 8010 - es gibt aber noch 8020, 8042 etc, damit wären es mehr - woran kann das liegen, was kann ich noch versuchen?

Liebe Grüße,
jopa
 
Schau dir dein GROUP BY an und Meiner.
Du gruppierst nach den ganzen PLZ. Ich nach der Leitgebietregel.
 
Hm - wenn ich deinen Code nehme, bekomme ich folgenden Fehler:

SQL-Status: HY000
Fehler-Code: 1000

syntax error, unexpected $end, expecting BETWEEN or IN or SQL_TOKEN_LIKE
 
Lässt Base kein CASE in dem GROUP BY zu? Schwach. Sehr schwach.
Dann erstelle zuerst eine ungruppierte Abfrage/View, falls man das in Base kann. Nachher gruppierst du die Resultate der VIew
 
OK - es scheint an Base (bzw an mir....) zu liegen - der Fehler wird nur rückgemeldet, wenn ich auf Abfrage durchführen klicke, muss zuerst auf SQL-Kommando direkt ausführen gehen - sorry!
Jetzt hat es funktioniert, danke!!

Jetzt muss ich nur noch schauen, wie ich das havin count >19 reinkrieg, aber zur not sortier ich es dann im Abfrageergebnis, dann sehe ich es ja auch....
 
Zurück