none
Frage zu CASE WHEN

    Frage

  •  Grüsse,

    ich möchte mir in einer Excel Tabelle anzeigen lassen, wenn in einer Datenbank Werte fehlerhaft eintragen wurden.

    Beispiel:

    CASE

                 

                 

                WHEN  dbo.Fahrzeuge.C_Status = 'Ausgeliefert'    

                      AND dbo.Fahrzeuge.C_Model = ''

                      THEN 'Model hinzufügen’

                WHEN dbo.Fahrzeuge.C_Status = 'Ausgeliefert'

                      AND (dbo.Fahrzeuge.Benzintyp = ''

                            or dbo.Fahrzeuge.Benzintyp is NULL)

                      THEN 'Fehlerhafter Benzintyp'

                WHEN dbo.Fahrzeuge.C_Status = 'Ausgeliefert'

                      AND (dbo.Fahrzeuge.CO2_Wert = ''

                            or dbo.Fahrzeuge.CO2_Wert is NULL)

                      THEN 'Fehlerhafter CO2 Wert'

               

    ELSE 'Datensatz korrekt'

    Problem ist, dass ich immer eine Abfrage nach der nächsten bearbeiten muss, d.h. wenn z.B. das Model fehlt bekomme

    ich als 1. Fehlermeldung angzeigt, dass ich das Model hinzufügen muss.

    Wenn dann noch der CO2 Typ fehlt, bekomme ich diesen als 2. Fehlermeldung angezeigt.

    Ich muss also 2 Mal in den Datensatz gehen um Korrekturen vorzunehmen.

    Ich suche nach einer Möglichkeit, dass alle Fehlermeldungen auf einmal dargestellt werden, so dass ich den Datensatz nur einmal aufrufen muss und alles ändern kann, was geändert weden muss.

    Bei einem Wagen wurde z.B. das Model nicht ausgefüllt und der CO2 Typ fehlt, dann wäre es prima, wenn ich diese Fehlermeldungen direkt auf einen Blick sehen könnte, z.B. Model hinzufügen, CO2 Wert hinzufügen.

    Gibt es eine Möglichkeit dies zu bewerkstelligen ?

    Im Voraus besten Dank

    Tausendwinter

    Dienstag, 21. Februar 2012 13:59

Antworten

  • Hallo Tausendwinter!
     
    Du könntest mehrere CASE-Konstrukte verknüpfen:
     
       CASE
          WHEN dbo.Fahrzeuge.C_Status = 'Ausgeliefert'
             THEN
                CASE
                   WHEN dbo.Fahrzeuge.C_Model = ''
                      THEN 'Model hinzufügen ’
                   ELSE ''
                END +
                   CASE
                      WHEN COALESCES(dbo.Fahrzeuge.Benzintyp, '') = ''
                         THEN 'Fehlerhafter Benzintyp '
                      ELSE ''
                   END +
                   CASE
                      WHEN COALESCES(dbo.Fahrzeuge.CO2_Wert, '') = ''
                         THEN 'Fehlerhafter CO2 Wert '
                      ELSE ''
                   END
          ELSE 'Datensatz korrekt'
       END
     
    Ein anderer Ansatz wäre, Prüfungen als einzelne SELECT-Statements zu realisieren
    und deren Ergebnis in eine (temporäre) Tabelle zu schreiben und diese dann
    auszugeben.
     
     
    Grüße
    Thomas
     
    --
    Any problem in computer science can be solved with another layer
    of indirection. But that usually will create another problem.
                                       David Wheeler
     
    Dienstag, 21. Februar 2012 14:43

Alle Antworten

  • Hallo Tausendwinter!
     
    Du könntest mehrere CASE-Konstrukte verknüpfen:
     
       CASE
          WHEN dbo.Fahrzeuge.C_Status = 'Ausgeliefert'
             THEN
                CASE
                   WHEN dbo.Fahrzeuge.C_Model = ''
                      THEN 'Model hinzufügen ’
                   ELSE ''
                END +
                   CASE
                      WHEN COALESCES(dbo.Fahrzeuge.Benzintyp, '') = ''
                         THEN 'Fehlerhafter Benzintyp '
                      ELSE ''
                   END +
                   CASE
                      WHEN COALESCES(dbo.Fahrzeuge.CO2_Wert, '') = ''
                         THEN 'Fehlerhafter CO2 Wert '
                      ELSE ''
                   END
          ELSE 'Datensatz korrekt'
       END
     
    Ein anderer Ansatz wäre, Prüfungen als einzelne SELECT-Statements zu realisieren
    und deren Ergebnis in eine (temporäre) Tabelle zu schreiben und diese dann
    auszugeben.
     
     
    Grüße
    Thomas
     
    --
    Any problem in computer science can be solved with another layer
    of indirection. But that usually will create another problem.
                                       David Wheeler
     
    Dienstag, 21. Februar 2012 14:43
  • Danke Dir Thomas :-)
    Dienstag, 21. Februar 2012 14:52