❤️ Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! ❤️
Unterstützen Sie das LibreOffice-Forum und helfen Sie uns, unser Ziel für 2025 zu erreichen!

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱


❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Abfrage aus Abfrage

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
debrequ
Beiträge: 33
Registriert: Di 29. Nov 2016, 18:33

Abfrage aus Abfrage

Beitrag von debrequ » Sa 18. Mär 2017, 18:03

Hallo,

ich möchte mit einer Abfrage Datensätze aus einer anderen Abfrage herausfiltern.
Das gelingt mir nicht. Ich erhalte folgende Meldung (Auszug): Cannot be in ORDER BY clause in stament [Select ....
Geht eine solche Abfrage nicht?

Ich würde gerne einen Scrennshot von der Meldung hier anhängen, weil diese sehr lang ist. Geht das? Und wenn ja wie?
Gruß
debrequ

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Abfrage aus Abfrage

Beitrag von F3K Total » So 19. Mär 2017, 00:26

Hi,
versuche mal die erste Abfrage ohne ORDER BY.
Das kannst du in der zweiten machen.
Wenn das nicht hilft, lade lieber die Datenbank, ggf. verfremdet, hoch, ein Bild hilft nicht, mindestens aber den SQL Code der Abfragen.
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

RobertG
* LO-Experte *
Beiträge: 2888
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Abfrage aus Abfrage

Beitrag von RobertG » So 19. Mär 2017, 09:51

Hallo debrequ,

so eine Meldung kommt eventuell, wenn Du mit Funktionen in der vorhergehenden Abfrage gearbeitet hast. Die einfachste Lösung ist hier: Aus der vorhergehenden Abfrage eine Ansicht zu machen. Damit kann Base dann wieder arbeiten wie mit einer Tabelle - nur ist die Dateneingabe in der Ansicht naturgemäß nicht möglich.

Außerdem brauchst Du ja nicht, wie R. anmerkt, bereits die erste Abfrage zu sortieren. Es reicht doch, dies in der 2. Abfrage zu erledigen.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

debrequ
Beiträge: 33
Registriert: Di 29. Nov 2016, 18:33

Re: Abfrage aus Abfrage

Beitrag von debrequ » So 19. Mär 2017, 17:38

Hallo,
F3K Total hat geschrieben:versuche mal die erste Abfrage ohne ORDER BY.
Wenn ich wüsste wie das geht. ich arbeite nämlich nur in der Design-Ansicht. Das ORDER BY wird nicht von mir eingegeben.

Aber hier die Abfrage in SQL: SELECT "ID", "Mitgliedsnummer", "Geschl", "Name", "VName", "ZWort", "Straße", "PLZ", "Ort", "GebDatum", "Austritt", YEAR( "GebDatum" ) AS "GebJahr", MONTH( "GebDatum" ) AS "GebMonat", DAY( "GebDatum" ) AS "GebTag", YEAR( NOW( ) ) - YEAR( "GebDatum" ) AS "Alter" FROM "Mitglieder" WHERE ( "Austritt" = {d '2017-12-31' } OR "Austritt" IS NULL )

Bis hier her funktioniert die Abfrage

"Mitglieder" ist keine Abfrage sondern die Ursprungstabelle. Entschudigung.

Die beiden Kriterien "Austritt": IS NULL und "Austritt" = {d '2017-12-31' } stehen in der Design-Ansicht in zwei Zeilen Kriterium.
Schreibe ich sie in eine Zeile (IST LEER ODER #31.12.2017# ) kommt die Meldung "Syntaxfehler im SQL-Ausdruck"

Die WHERE-Anweisung möchte ich nun um die Jahre 1927, 1937, 1947, 1957, 1967, 1977, 1987 und 1997 erweitern, also alle mit Runden Geburtstagen.

Wie geht das?
Zuletzt geändert von debrequ am So 19. Mär 2017, 18:00, insgesamt 1-mal geändert.
Gruß
debrequ

RobertG
* LO-Experte *
Beiträge: 2888
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Abfrage aus Abfrage

Beitrag von RobertG » So 19. Mär 2017, 17:51

Hallo debrequ,
Schreibe ich sie in eine Zeile (IST LEER ODER #31.12.2017# ) kommt die Meldung "Syntaxfehler im SQL-Ausdruck"
Das liegt daran, dass der Editor aus dieser Zeile nichts mehr versteht. IST LEER wird intern umgesetzt in IS NULL. Die Lage der Eingabe in zwei Zeilen macht aus der Verbindung OR. ODER kennt SQL nicht - und wird hier einfach so weiter gegeben.

Die Where-Anweisung kannst Du ergänzen um

Code: Alles auswählen

AND MOD((YEAR( NOW( ) ) - YEAR( "GebDatum" )),5) = 0
Hier wird das Alter nach Jahren genommen und durch 5 dividiert. Existiert ein Rest, so wird der angegeben. Das Ergebnis ist also 0, wenn das Alter genau durch 5 teilbar ist.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

debrequ
Beiträge: 33
Registriert: Di 29. Nov 2016, 18:33

Re: Abfrage aus Abfrage

Beitrag von debrequ » So 19. Mär 2017, 18:29

Hallo Robert,

ich glaube ich habe die Erweiterung falsch eingefügt.
Es kommt jedenfalls nicht das gewünschte Ergebis raus.
Hier die neue SQL-Anweisung:
SELECT "ID", "Mitgliedsnummer", "Geschl", "Name", "VName", "ZWort", "Straße", "PLZ", "Ort", "GebDatum", "Austritt", YEAR( "GebDatum" ) AS "GebJahr", MONTH( "GebDatum" ) AS "GebMonat", DAY( "GebDatum" ) AS "GebTag", YEAR( NOW( ) ) - YEAR( "GebDatum" ) AS "Alter" FROM "Mitglieder" WHERE ( "Austritt" IS NULL OR "Austritt" = {d '2017-12-31' } AND MOD( ( YEAR( NOW( ) ) - YEAR( "GebDatum" ) ), 5 ) = 0 )

[quote="RobertG"]
Die Where-Anweisung kannst Du ergänzen um
AND MOD((YEAR( NOW( ) ) - YEAR( "GebDatum" )),5) = 0[/code]

Wo wird das Ergebnis hingeschrieben? In der Abfrage finde ich das nicht. Halt, mein Fehler ich hatte die Spalte nicht auf "sichtbar" gehakt.
Es scheint also zu gehen. Jetzt muss ich nur noch die mit "0" herausfiltern.
Gruß
debrequ

debrequ
Beiträge: 33
Registriert: Di 29. Nov 2016, 18:33

Re: Abfrage aus Abfrage

Beitrag von debrequ » So 19. Mär 2017, 18:39

Hallo Robert,

es funtioniert doch noch nicht richtig.

Mit 0 werden nicht nur die Mitglieder mit runden Geburtstagen gekennzeichnet, sondern auch die mit 25, 35, 45 usw.

Hier noch mal die komplette SQL-Anweisung:

SELECT "ID", "Mitgliedsnummer", "Geschl", "Name", "VName", "ZWort", "Straße", "PLZ", "Ort", "GebDatum", "Austritt", YEAR( "GebDatum" ) AS "GebJahr", MONTH( "GebDatum" ) AS "GebMonat", DAY( "GebDatum" ) AS "GebTag", YEAR( NOW( ) ) - YEAR( "GebDatum" ) AS "Alter", MOD( ( YEAR( NOW( ) ) - YEAR( "GebDatum" ) ), 5 ) FROM "Mitglieder" WHERE ( "Austritt" IS NULL OR "Austritt" = {d '2017-12-31' } AND MOD( ( YEAR( NOW( ) ) - YEAR( "GebDatum" ) ), 5 ) = 0 ) ORDER BY ( MOD( ( YEAR( NOW( ) ) - YEAR( "GebDatum" ) ), 5 ) ) ASC

Die Mitglieder mit Austritt am 31.12.2017 fehlen.
Gruß
debrequ

RobertG
* LO-Experte *
Beiträge: 2888
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Abfrage aus Abfrage

Beitrag von RobertG » So 19. Mär 2017, 21:32

Hallo debrequ,

das mit den runden Geburtstagen habe ich übersehen - vor kurzem war etwas ähnliches mit den 5ern wegen irgendwelcher Jubiläen:

Code: Alles auswählen

SELECT "ID", "Mitgliedsnummer", "Geschl", "Name", "VName", "ZWort", "Straße", "PLZ", "Ort", "GebDatum", "Austritt", YEAR( "GebDatum" ) AS "GebJahr", MONTH( "GebDatum" ) AS "GebMonat", DAY( "GebDatum" ) AS "GebTag", YEAR( NOW( ) ) - YEAR( "GebDatum" ) AS "Alter" FROM "Mitglieder" WHERE ( ("Austritt" IS NULL OR "Austritt" = {d '2017-12-31' } ) AND MOD( ( YEAR( NOW( ) ) - YEAR( "GebDatum" ) ), 10 ) = 0 ) ORDER BY ( YEAR( NOW( ) ) - YEAR( "GebDatum" ) ) ASC
Setze einmal die Klammer entsprechend, so dass zum einen die Austrittsbedingung trifft und zum anderen die Leute mit runden Geburtstagen aufgezählt werden. Den Code kannst Du direkt in die SQL-Ansicht hinein kopieren. Wie das in der GUI aussieht habe ich nicht nachvollzogen.

Noch besser ist natürlich, wenn der Austritt auch festgelegt wird

Code: Alles auswählen

... "Austritt" = YEAR(NOW())||'-12-31' ) AND MOD ...
Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

debrequ
Beiträge: 33
Registriert: Di 29. Nov 2016, 18:33

Re: Abfrage aus Abfrage

Beitrag von debrequ » Mo 20. Mär 2017, 16:13

Hallo Robert,

nun hat es geklappt. Zunächst hatte ich eine schließende Klammer zu viel. Nachdem ich die gelöscht hatte, war das Eregebnis so wie ich es mir gewünscht habe.

Danke für die Unterstützung.
Gruß
debrequ


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten