Einzelnen Beitrag anzeigen

Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#1

SQL Syntax, Vergleich mit 2 Bedingungen

  Alt 21. Jun 2008, 11:47
Datenbank: firebird • Version: 2.0 • Zugriff über: Zeos
Hallo an alle SQL Experten...

ich versuche mich verständlich auszudrücken...was nicht einfach wird.
Mich interressiert ob nachfolgendes überhaupt möglich ist bzw. die Syntax eines solchen Ausdruckes.

Status 3 = Tätigkeit unerledigt (Status)
Verbrauch 1 = Verbrauchsmaterial ja (Status)

gegeben: (funktioniert wenn Edit12.Text eindeutig ist)
Delphi-Quellcode:
ZQueryFilter.SQL.Text:= 'select ANLAGE,BEZEICHNUNG,ART,QUALITAT,GROSSE,MENGE ';
ZQueryFilter.SQL.Add('from FILTEREINSATZ where VERBRAUCH = 1 and ANLAGE = (select ANLAGE from WARTUNGL where NUMMER = :Nummer) ');
ZQueryFilter.SQL.Add('and BEZEICHNUNG in (select BEZEICHNUNG from WARTUNGP where TATIGKEIT = :Tatigkeit and STATUS = 3 and NUMMER = :Nummer) ');
ZQueryFilter.SQL.Add('order by ANLAGE');
ZQueryFilter.ParamByName('Nummer').Value:= Edit12.Text;
ZQueryFilter.ParamByName('Tatigkeit').Value:= '3205 * Filtermedium wechseln';
ZQueryFilter.Open;
... durch die eindeutige Nummer erhalte ich die BEZEICHNUNG eindeutig (ähnlich distinct) da die Bezeichnung nur einmalig pro Anlage existiert und somit auch den Datensatz aus FILTEREINSATZ eindeutig.

...jetzt kommts

...ist Edit12.Text nicht eindeutig (z.B.leer) sollen alle Filter aller Anlagen geladen werden (ausgenommen Filter deren zugeordnete Tätigkeit erledigt ist.

...Syntaxfehler (einer mehrerer Versuche)
Delphi-Quellcode:
ZQueryFilter.SQL.Text:= 'select ANLAGE,BEZEICHNUNG,ART,QUALITAT,GROSSE,MENGE ';
ZQueryFilter.SQL.Add('from FILTEREINSATZ where VERBRAUCH = 1 ');
ZQueryFilter.SQL.Add('and BEZEICHNUNG,ANLAGE in (select A.BEZEICHNUNG,B.ANLAGE from A.WARTUNGP,B.WARTUNGL where A.TATIGKEIT = :Tatigkeit and A.STATUS = 3 and B.NUMMER = A.NUMMER) ');
ZQueryFilter.SQL.Add('order by ANLAGE');
ZQueryFilter.ParamByName('Tatigkeit').Value:= '3205 * Filtermedium wechseln';
ZQueryFilter.Open;
... da jetzt die Bezeichnungen mehrfach vorkommen können muß ich den "Vergleich" mit der Anlagennummer koppeln.
Vergleich mit 2 Feldern

im Prinzip dieser Part: and BEZEICHNUNG,ANLAGE

einfach mit and BEZEICHNUNG and ANLAGE geht nicht, da die Bezeichnung durch andere Anlagen identisch vorkommen kann und die Anlage sowieso. Eindeutig kann es nur sein, wenn ich beide in Verbindung betrachte.

...Nachfragen habt Ihr sowieso...

Danke für Eure Ideen.
  Mit Zitat antworten Zitat