In Abfrage "Wenn dann sonst" nach WHERE

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: In Abfrage "Wenn dann sonst" nach WHERE

Re: In Abfrage "Wenn dann sonst" nach WHERE

von oerki » Mi, 09.03.2016 14:06

Hallo Robert,

ja das denke ich mir...
Aber ich denke mir reicht das jetzt erstmal soweit. Habe mich von dem "Wenn dann sonst" gelöst und habe das jetzt mit "entweder , oder" gelöst. Funktioniert genauso gut. Ich probiere noch mal ein wenig rum und wenn ich merke ich komme absolut nicht weiter, dann komme ich gerne auf das Angebot zurück.

VG

Steffen

Re: In Abfrage "Wenn dann sonst" nach WHERE

von RobertG » Mo, 07.03.2016 17:12

Hallo Steffen,

Du scheinst tatsächlich ein Zahlenfeld und kein Ja/Nein-Feld in der Tabelle zu haben. Dann müsste der Code natürlich entsprechend angepasst sein. Und so wie Du das schreibst ( LIKE '0') könnte es sogar sein, dass Du da für '1' und '0' ein Textfeld nutzt. Warum auch immer ...

Code: Alles auswählen

SELECT * FROM "Daten" WHERE "Datum" BETWEEN IFNULL(( SELECT "F_DatumVon" FROM "Filter_Zählung"  WHERE "F_DatumZw" = '0'),"Datum") AND IFNULL(( SELECT "F_DatumBis" FROM "Filter_Zählung"  WHERE "F_DatumZw" = '0' ),"Datum")
Für weitere Hilfen wäre es sinnvoll, das Beispiel hier (ohne persönliche Daten mit ein paar Dummies) zu posten. Sonst ist das ein Stochern im Nebel.

Gruß

Robert

Re: In Abfrage "Wenn dann sonst" nach WHERE

von oerki » So, 06.03.2016 20:54

Da das mit dem Datum ja nicht der Einzige Teil der Abfrage ist bläht sich das jetzt extrem auf und ich sehe schon Gefahr den Überblick zu verlieren...

Es gibt ca. 10 Abfragen, die mit "AND" verknüpft sind.

Wenn ich jetzt das Ganze kombinieren will, dann sieht das so aus:

Code: Alles auswählen

SELECT * FROM "Daten" WHERE

( SELECT "F_DatumZw" FROM "Filter_Zählung" ) LIKE '1' AND ( LOWER ( "Fil" ) LIKE ( SELECT LOWER ( '%' || "F_Fil" || '%' ) FROM "Filter_Zählung" ) OR ( SELECT LOWER ( '%' || "F_Fil" || '%' ) FROM "Filter_Zählung" ) IS NULL )

OR

( SELECT "F_DatumZw" FROM "Filter_Zählung" ) LIKE '0' AND ( LOWER ( "Fil" ) LIKE ( SELECT LOWER ( '%' || "F_Fil" || '%' ) FROM "Filter_Zählung" ) OR ( SELECT LOWER ( '%' || "F_Fil" || '%' ) FROM "Filter_Zählung" ) IS NULL ) AND "Datum" BETWEEN ( SELECT "F_DatumVon" FROM "Filter_Zählung" ) AND ( SELECT "F_DatumBis" FROM "Filter_Zählung" )
Der aktuelle Code ist dann ca. 10 mal länger...

Kann man das irgendwie kürzer und "schöner" machen, ohne dass ich das Ganze doppelt aufschreiben muss?

Re: In Abfrage "Wenn dann sonst" nach WHERE

von oerki » So, 06.03.2016 20:34

Hallo,

warum nicht früher...
Hab es hinbekommen!

Code: Alles auswählen

SELECT * FROM "Daten" WHERE ( SELECT "F_DatumZw" FROM "Filter_Zählung" ) LIKE '1' OR ( SELECT "F_DatumZw" FROM "Filter_Zählung" ) LIKE '0' AND "Datum" BETWEEN ( SELECT "F_DatumVon" FROM "Filter_Zählung" ) AND ( SELECT "F_DatumBis" FROM "Filter_Zählung" )
Ehrlich gesagt weiß ich nicht warum der erste Teil den Unterschied macht, aber es klappt... :D

Anscheinend erkennt der Befehl in welcher Reihenfolge die "AND" und "OR" sind. Kann das sein?

VG

Steffen

Re: In Abfrage "Wenn dann sonst" nach WHERE

von oerki » So, 06.03.2016 20:00

Hallo.

Leider kommt da:
Syntax error in SQL expression.
Bei SQL Direkt kommt auch ne Fehlermeldung

Steffen

Re: In Abfrage "Wenn dann sonst" nach WHERE

von RobertG » So, 06.03.2016 19:47

Hallo Steffen,

versuche einmal das Folgende:

Code: Alles auswählen

SELECT * FROM "Daten" WHERE "Datum" BETWEEN IFNULL(( SELECT "F_DatumVon" FROM "Filter_Zählung"  WHERE "F_DatumZw" IS TRUE),"Datum") AND IFNULL(( SELECT "F_DatumBis" FROM "Filter_Zählung"  WHERE "F_DatumZw" IS TRUE ),"Datum")
Gegebenenfalls musst Du noch TRUE auf FALSE ändern, wenn ich das Ansinnen richtig verstanden habe.

Gruß

Robert

In Abfrage "Wenn dann sonst" nach WHERE

von oerki » So, 06.03.2016 19:36

Hallo.

Seit einiger Zeit kämpfe ich mit einem Problem und finde keine Lösung, oder Erklärung.

Ich habe 2 Tabellen.
Eine heißt "Daten" und hat unter anderem die Spalte "Datum".
Die andere heißt "Filter_Zählung" und hat unter anderem die Spalten "F_DatumZw", "F_DatumVon" und F_DatumBis".

In dem Formular sind 2 Datumsfelder und ein Markierfeld (zum Häkchen setzen).

"F_DatumZw" hat so den Wert '0' oder '1' je nach Haken.
"F_DatumVon" und "F_DatumBis" geben eine Zeitspanne an, nach der selektiert werden soll.

In einer Abfrage will ich genau das selektieren.
Also:
WENN Haken nicht gesetzt
DANN sollen nur die Daten angezeigt werden, die in dem Zeitraum liegen
SONST soll das Datum nicht beachtet werden

Bisher klappt das ganz gut:
Haken im Formular wird nicht gesetzt und eine Zeitspanne gewählt.
Dann selektiert mir die folgende Abfrage die Daten und zeigt mir nur die an, die in dem Zeitraum liegen.

Code: Alles auswählen

SELECT * FROM "Daten" WHERE ( SELECT "F_DatumZw" FROM "Filter_Zählung" ) LIKE '0' AND "Datum" BETWEEN ( SELECT "F_DatumVon" FROM "Filter_Zählung" ) AND ( SELECT "F_DatumBis" FROM "Filter_Zählung" )
Wenn ich jetzt aber den Haken setze, dann zeigt er mir leider nicht alle Daten an, sondern gar keine!

Ich möchte aber in diesem Fall alle Daten sehen.

Darum dachte ich so in diese Richtung:

Code: Alles auswählen

SELECT * FROM "Daten" WHERE CASE WHEN( SELECT "F_DatumZw" FROM "Filter_Zählung" ) = '0' THEN "Datum" BETWEEN ( SELECT "F_DatumVon" FROM "Filter_Zählung" ) AND ( SELECT "F_DatumBis" FROM "Filter_Zählung" ) ELSE  NICHTS-MIT-DEM-DATUM-MACHEN  End
Geht das irgendwie, oder kann man meine erste Version so ändern, dass er mir alle Daten anzeigt, wenn der Haken gesetzt ist (also "F_DatumZw" auf '1' steht?

Vielleicht kann mich mal jemand in die richtige Richtung lenken?!

Vielen Dank

Steffen

Nach oben