[GELÖST] IF / CASEWHEN in SQL-Abfrage

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: [GELÖST] IF / CASEWHEN in SQL-Abfrage

Re: IF / CASEWHEN in SQL-Abfrage

von AHoppe » Mi, 26.12.2012 09:15

Ah, jetzt habe ich gerade gesehen CASE WHEN ... THEN ... ELSE ... END

Das hatte ich übersehen. Das wird nachher gleich ausprobiert!

Danke für den Hinweis.

Viele Grüße

Andreas

----

Nachtrag: So geht es jetzt! Vielen Dank!

Re: IF / CASEWHEN in SQL-Abfrage

von RobertG » Mi, 26.12.2012 08:53

Hallo Andreas,
AHoppe hat geschrieben:Ich gebe die Abfrage nicht in der "Zusammenklick-GUI" ein, sondern im SQL-Modus. Meine Abfrage läuft mit IF beim direkten Durchleiten.
Dann verweigere ich die direkte Abfrage und erhalte die besagte Fehlermeldung, sowohl bei IF als auch CASEWHEN als auch CASE WHEN.
Ob Du die Abfrage in der GUI einklickst, dann den Design-Modus ausschaltest und dort weiter machst, macht keinen Unterschied zur direkten Eingabe.
Ich habe das, was ich da geschrieben habe, natürlich vorher getestet. "IF" und "CASEWHEN" laufen bei mir nur im direkten Modus (SQL-Kommando direkt ausführen), CASE WHEN aber auch im GUI-Modus.
Die Abfrage, die ich zusammengesetzt habe:

Code: Alles auswählen

SELECT "Name", CASE WHEN "Name" LIKE '%Lord%' THEN 'Hallo' ELSE '- nichts -' END AS "Zusatz" FROM "test"."Tabelle1" AS "Tabelle1"
funktioniert mit AOO 3.4.1 und der nativen MySQL-Verbindung unter OpenSuSE 11.4 32bit rpm ohne "SQL-Kommando direkt ausführen".

Gruß

Robert

Re: IF / CASEWHEN in SQL-Abfrage

von AHoppe » Mi, 26.12.2012 08:08

Hallo Robert,

danke für Deine Antwort, aber das Verhalten kann ich nicht bestätigen. Ich gebe die Abfrage nicht in der "Zusammenklick-GUI" ein, sondern im SQL-Modus. Meine Abfrage läuft mit IF beim direkten Durchleiten.

Dann verweigere ich die direkte Abfrage und erhalte die besagte Fehlermeldung, sowohl bei IF als auch CASEWHEN als auch CASE WHEN.

Viele Grüße

Andreas

Re: IF / CASEWHEN in SQL-Abfrage

von RobertG » Di, 25.12.2012 09:08

Hallo Andreas,

Base ist da in der Interpretation der Funktionen noch etwas eingeschränkt. Obwohl ja die HSQLDB die interne Datenbank ist, unterstützt die GUI nicht alle Funktionen, die durch die Abfrage an die Datenbank möglich sind. Entsprechend habe ich jetzt auch für MySQL getestet, welche Funktion denn wohl in Frage kommt, die auch unterstützt wird:

Code: Alles auswählen

 CASE  WHEN "Name" LIKE '%foo%' THEN ...
funktioniert bei mir auch ohne direkte SQL-Abfrage.

Gruß

Robert

Re: IF / CASEWHEN in SQL-Abfrage

von AHoppe » Di, 25.12.2012 09:00

Ein weiterer kleiner Test brachte mich jetzt gerade so weit, dass die Abfrage mit IF grundsätzlich klappen würde, jedoch das LIKE den Fehler verursacht.

Ändere ich

LIKE '%foo%'

in

= 'Test foo bar'

dann wird die Abfrage ausgeführt. Aber ich muss in den Datenbankfeldern mit LIKE suchen, sonst bringt mir die Abfrage nichts...

Viele Grüße

Andreas

[GELÖST] IF / CASEWHEN in SQL-Abfrage

von AHoppe » Di, 25.12.2012 08:33

Hi Forum,

ich hänge gerade an einem SQL-Proble. Ich habe eine MySQL-Datenbank, die ich in OOO-Base nutze. Ich habe in OOO-Base mehrere Abfragen, auf die wiederum einige Dokumentvorlagen aufbauen.

Zunächst die Erklärung was ich erreichen will:

Ich muss eine Dokumentvorlage so ändern, dass in Abhängigkeit des Inhalts eines Feldes ein Absatz versteckt wird oder nicht. Da ich im Writer bei versteckten Absätzen nicht gefunden habe, wie ich ein LIKE realisieren kann, will ich das ganze über eine zusätzliche Spalte in der Abfrage lösen.


Meine bisherige Abfrage sieht wie folgt aus:

Code: Alles auswählen

SELECT `tbl_adresse`.`id` AS `ID`, `tbl_adresse`.`anrede` AS `Anrede` FROM `db_adv`.`tbl_adresse` AS `tbl_adresse` WHERE `tbl_adresse`.`id` = :IDN
Dadurch "fragt" mich OOO in der Writer-Vorlage nach Druck auf F4 erstmal nach der ID und sucht sich dann den richtigen Datensatz raus. Soweit so gut. Allerdings kann ich durch den Teil

Code: Alles auswählen

WHERE `tbl_adresse`.`id` = :IDN
die SQL-Abfrage nicht mehr direkt ausführen lassen.

Nun muss ich in die Abfrage zusätzlich etwas in der Art integrieren:

Code: Alles auswählen

(IF(CONCAT( `tbl_adresse`.`anrede`, `tbl_adresse`.`name` ) LIKE '%foo%', '1', '0')) AS `bar`
Das funktioniert prima, wenn ich das SQL-Kommando direkt ausführen könnte (geht aber nicht, siehe oben). In OOO-Base erhalte ich eine Fehlermeldung beim Speichern der Abfrage:

SQL-Status: HY000
Fehler-Code: 1000

syntax error, unexpected $end, expecting BETWEEN or IN or SQL_TOKEN_LIKE


Also habe ich mit CASEWHEN weiterzukommen versucht. Wenn ich IF durch CASEWHEN ersetze, erhalte ich beim Speichern der Abfrage die gleiche Fehlermeldung.

Deshalb meine Frage: Kann ich eine IF-Bedingung in meine Abfrage einbauen, wenn ich SQL-Kommandos nicht direkt ausführen lassen kann, weil ich noch eine Parameterabfrage habe?

Vielen Dank schonmal für Hinweise und ruhige Weihnachtsfeiertage!

Andreas

Nach oben