none
WHERE Abfrage auf 2 Spalten RRS feed

  • Frage

  • Hallo zusammen!

    Ich würde gerne eine "WHERE-Abfrage" auf 2 Spalten einer Tabelle machen.

    In der Spalte 'Statustext' habe ich nur folgende 3 Werte auf mehrere tausend Datensätze:
    - Produktion
    - Projekt
    - NULL-Wert

    In der Spalte 'Severity' habe ich auch nur folgende 3 Werte auf mehrere tausend Datensätze:
    - MAJOR
    - WARNING
    - CRITICAL

    Das heisst alle Datensätze die in der Spalte 'Statustext' den Wert "Projekt" oder "NULL" haben und in der Spalte 'Severity' den Wert "CRITICAL".

    Ich verwende momentan folgende Abfrage:

    ... ... WHERE (StatusText LIKE '%Projekt%' OR StatusText LIKE 'NULL' AND (Severity LIKE '%CRITICAL%')) ...

    ...

    Der 'Statustext' hat es mir schön gefiltert und ich habe nur die Datensätze welche "Projekt" und "NULL" beinhalten.
    Aber in Spalte 'Severity' werden immer noch alle möglich Werte angezeigt und nicht nur auf "CRITICAL" eingeschränkt.

    Danke für eure Hilfe!

    Gruss,
    Enirque


    Donnerstag, 10. Januar 2013 16:09

Antworten

  • Hi,

    wenn in StatusText ein Nullwert steht (also eben nichts, weder 0 noch ein Text 'NULL') kann das so auch nicht funktionieren.

    Ich würde die WHERE Klausel daher mal so umstellen:

    SELECT ...
    FROM   ...
    WHERE  ISNULL( StatusText, 'Projekt' ) = 'Projekt'
    AND    Severity = 'CRITICAL'

    In deinem Fall ist die Abfrage auch von der Verschachtelung her falsch. Du fragst alle Einträge ab, bei denen StatusText = 'Projekt' ist und dazu alle, bei denen StatusText = 'NULL' und Severity = 'CRITICAL'. D.h. wenn StatusText = 'Projekt' ist, wird der Datensatz immer zurückgeliefert, die Einschränkung auf Severity greift nur für den zweiten Fall.

    Mit einer korrekten Klammerung kann man das lösen:

    SELECT ...
    FROM   ...
    WHERE  (
            StatusText LIKE '%Projekt%' OR
            StatusText LIKE 'NULL'
           )
    AND    Severity LIKE '%CRITICAL%'
    


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Donnerstag, 10. Januar 2013 16:16
    Moderator

Alle Antworten

  • Hi,

    wenn in StatusText ein Nullwert steht (also eben nichts, weder 0 noch ein Text 'NULL') kann das so auch nicht funktionieren.

    Ich würde die WHERE Klausel daher mal so umstellen:

    SELECT ...
    FROM   ...
    WHERE  ISNULL( StatusText, 'Projekt' ) = 'Projekt'
    AND    Severity = 'CRITICAL'

    In deinem Fall ist die Abfrage auch von der Verschachtelung her falsch. Du fragst alle Einträge ab, bei denen StatusText = 'Projekt' ist und dazu alle, bei denen StatusText = 'NULL' und Severity = 'CRITICAL'. D.h. wenn StatusText = 'Projekt' ist, wird der Datensatz immer zurückgeliefert, die Einschränkung auf Severity greift nur für den zweiten Fall.

    Mit einer korrekten Klammerung kann man das lösen:

    SELECT ...
    FROM   ...
    WHERE  (
            StatusText LIKE '%Projekt%' OR
            StatusText LIKE 'NULL'
           )
    AND    Severity LIKE '%CRITICAL%'
    


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Donnerstag, 10. Januar 2013 16:16
    Moderator
  • Hi Stefan,

    Ich danke dir viel Mal für deine kompetente Hilfe!
    Hat super geklappt.

    Gruss,
    Enrique

    Donnerstag, 10. Januar 2013 16:27