Sub Query

2SR82

Benutzer
Beiträge
6
Hallo,

muss mich jetzt nach gut nem halben Jahr mal wieder mit SQL beschäftigen und komme schon wieder nicht klar.
Hab schon einiges gelesen und denke das ich mit einer Sub Query arbeiten muss, bekomme das aber nicht richtig zum laufen.

Folgende SQL Abfrage existiert bereits und funktioniert fehlerfrei

Code:
SELECT     TicketID, Zustaendig_Person, Zustaendig_Bereich, Betreff, Zieltermin, PrioNr, Prio, Prio_Kuerzel, StatusNr, Status, TicketTyp, ErstelltAm, ErstelltAmJahr, ErstelltAmMonat, PrioNiedrig, PrioNormal, PrioKritisch, PrioZeitkritisch, StatusOffen, StatusInBearbeitung, StatusErledigt, StatusStorniert, UeberZieltermin, DauerInStunden, DauerInMinuten, DauerInTagen, Kunde, Kunde_Kostenstelle, T_Company, T_Location
FROM         VI_LuW_TC_Tickets
WHERE     (ErstelltAmMonat = @Monat) AND (StatusNr <> 4) OR
                      (StatusNr <> 4) AND (@Monat = - 1) OR
                      (ErstelltAmMonat = @Monat) AND (@Status = - 1) OR
                      (@Monat = - 1) AND (@Status = - 1)

Jetzt benötige ich aber noch eine bzw. eher zwei zusätzliche Bedingungen.

Und zwar sollen nur Datensätze angezeigt werden bei denen der "Betreff" NICHT einen bestimmte String enthält UND GLEICHZEITIG das Feld "Kunde_Kostenstelle" NICHT Null ist.

Anders gesagt, er soll alle Datensätze ignorieren die den String im "Betreff" enthalten und keine "Kunde_Kostenstelle" eingetragen haben. Wenn aber nur eine der beiden Bedingungen zutrifft soll der Wert trotzdem angezeigt werden.

Code:
(Betreff NOT LIKE 'SR: %') AND (Kunde_Kostenstelle <> '')

so ungefähr soll also die zusätzliche Bedingung aussehen.

Wenn ich das ganze jetzt aber zusammenschreibe funktioniert das nicht wie erwartet und er scheint alle Datensätze zu filtern bei denen auch schon nur eine der beiden Bedingungen zutrifft.

Code:
SELECT     TicketID, Zustaendig_Person, Zustaendig_Bereich, Betreff, Zieltermin, PrioNr, Prio, Prio_Kuerzel, StatusNr, Status, TicketTyp, ErstelltAm, ErstelltAmJahr, 
                      ErstelltAmMonat, PrioNiedrig, PrioNormal, PrioKritisch, PrioZeitkritisch, StatusOffen, StatusInBearbeitung, StatusErledigt, StatusStorniert, UeberZieltermin, 
                      DauerInStunden, DauerInMinuten, DauerInTagen, Kunde, Kunde_Kostenstelle, T_Company, T_Location
FROM         VI_LuW_TC_Tickets
WHERE
(
  ((Betreff NOT LIKE 'SR: %') AND (Kunde_Kostenstelle <> '') )
AND (
      (ErstelltAmMonat = @Monat) AND (StatusNr <> 4) OR
      (StatusNr <> 4) AND (@Monat = - 1)  OR
      (ErstelltAmMonat = @Monat) AND (@Status = - 1) OR
      (@Monat = - 1) AND (@Status = - 1)
    )
)

Die Klammern scheinen in SQL ja nicht wirklich eine Wirkung zu haben.
Nur leider weiß ich jetzt nicht wie die richtige Syntax hier aussehen muss.
Hoffe mir kann da jemand helfen.

LG
 
Werbung:
Die Klammern haben sehr wohl ihre vorgesehene Wirklung, hier dein Query mal gekürzt:
Code:
SELECT    TicketID, Zustaendig_Person, Zustaendig_Bereich, Betreff, Zieltermin, PrioNr, Prio, Prio_Kuerzel, StatusNr, Status, TicketTyp, ErstelltAm, ErstelltAmJahr, ErstelltAmMonat, PrioNiedrig, PrioNormal, PrioKritisch, PrioZeitkritisch, StatusOffen, StatusInBearbeitung, StatusErledigt, StatusStorniert, UeberZieltermin, DauerInStunden, DauerInMinuten, DauerInTagen, Kunde, Kunde_Kostenstelle, T_Company, T_Location
FROM    VI_LuW_TC_Tickets
WHERE((    ErstelltAmMonat = @Monat
OR        @Monat = - 1 )
AND        StatusNr <> 4
OR    (    ErstelltAmMonat = @Monat
OR        @Monat = - 1 )
AND        @Status = - 1 )
AND    (    Kunde_Kostenstelle <> ''
OR        Kunde_Kostenstelle = ''
AND        Betreff NOT LIKE 'SR: %' )
Dein Problem ist vermutlich eher das Betreff NOT LIKE 'SR: %' AND Kunde_Kostenstelle <> '' nicht deinem beschriebenen Wunsch entspricht. Es setzt vorraus das beide Bedingungen wahr sind, also weder Betreff SR enthält, noch eine Kostenstelle eingetragen ist. Eine der Bedingungen darf aber zutreffen, nur eben nicht beide "gleichzeitig". Also habe ich Kostenstelle verboten oder Kostenstelle erlaubt aber dann SR verboten, geht natürlich auch andersrum.
 
Werbung:
Hey,

danke für deine Hilfe.
Also da war noch irgendwie was verdreht, zumindest hat er mir noch nicht die Werte geliefert die ich brauchte, aber mit deinem Denkanstoß hat es letztlich dann doch funktioniert :)

Im Prinzip habe ich einfach die alte Bedingung komplett eingeklammert und dann deine Ergänzung noch angehängt. Funktioniert super und sieht dann wie folgt aus.

Code:
WHERE     ((ErstelltAmMonat = @Monat) AND (StatusNr <> 4) OR
                      (StatusNr <> 4) AND (@Monat = - 1) OR
                      (ErstelltAmMonat = @Monat) AND (@Status = - 1) OR
                      (@Monat = - 1) AND (@Status = - 1))
AND    (    Kunde_Kostenstelle <> '' 
OR        Kunde_Kostenstelle IS NULL  AND  Betreff NOT LIKE 'SR: %' )

Vielen Dank nochmal!
 
Zurück
Oben