Seite 1 von 1
Abfrage aus Abfrage
Verfasst: Sa 18. Mär 2017, 18:03
von debrequ
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?
Re: Abfrage aus Abfrage
Verfasst: So 19. Mär 2017, 00:26
von F3K Total
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
Re: Abfrage aus Abfrage
Verfasst: So 19. Mär 2017, 09:51
von RobertG
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
Re: Abfrage aus Abfrage
Verfasst: So 19. Mär 2017, 17:38
von debrequ
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?
Re: Abfrage aus Abfrage
Verfasst: So 19. Mär 2017, 17:51
von RobertG
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
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
Re: Abfrage aus Abfrage
Verfasst: So 19. Mär 2017, 18:29
von debrequ
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.
Re: Abfrage aus Abfrage
Verfasst: So 19. Mär 2017, 18:39
von debrequ
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.
Re: Abfrage aus Abfrage
Verfasst: So 19. Mär 2017, 21:32
von RobertG
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
Gruß
Robert
Re: Abfrage aus Abfrage
Verfasst: Mo 20. Mär 2017, 16:13
von debrequ
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.