Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Bedingungen im Select

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Pamps, 14 Februar 2014.

  1. Pamps

    Pamps Benutzer

    Hallo,

    ich wollte mal fragen, ob ich in einem Select eine Bedingung einbauen kann. also ich möchte folgendes auswerten:

    Die Daten werden nach Stunden gespeichert und ich möchte mir alle Daten auf Stundenbasis anzeigen lassen, aber wenn die 8 Stunde oder die 20 Stunde ausgewählt wird soll die Spalte bezahlt als nicht relevant ausgegeben werden.

    Ich hoffe es ist verständlich formuliert.
     
  2. akretschmer

    akretschmer Datenbank-Guru


    Ich hoffe Dich richtig verstanden zu haben: case when ... then ... end

    Code:
    test=# create table pamps (stunde int);
    CREATE TABLE
    Time: 207,534 ms
    test=*# copy pamps from stdin;
    Enter data to be copied followed by a newline.
    End with a backslash and a period on a line by itself.
    >> 1
    >> 3
    >> 4
    >> \.
    Time: 4128,103 ms
    test=*# select stunde, case when stunde = 3 then 'Hallo?' else '' end as info from pamps ;
     stunde |  info
    --------+--------
      1 |
      3 | Hallo?
      4 |
    (3 rows)
    
     
  3. Pamps

    Pamps Benutzer

    Ah Danke für die schnelle Antwort.

    Das sieht schon mal gut aus, jetzt ist es aber so, dass es sein kann das zur Stunde 3 etwas in Spalte 1, 2, 3 steht also muss die Bedingung sein wenn Stunde 1 und Bezahlt 1 ist dann soll das Ergebnis als Spalte nicht relevant ausgegeben werden.
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Das case when kann man erweitern.

    Code:
    test=*# select * from pamps ;
     stunde | cond
    --------+------
      1 |  3
      3 |  4
      5 |  6
    (3 rows)
    
    Time: 0,193 ms
    test=*# select stunde, case when stunde = 3 or cond = 3 then 'Hallo?' else '' end as info from pamps ;
     stunde |  info
    --------+--------
      1 | Hallo?
      3 | Hallo?
      5 |
    (3 rows)
    
     
  5. Pamps

    Pamps Benutzer

    statt or kann ich dann auch and nutzen?
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Jupps. Probier es doch einfach aus. Ich verwende PostgreSQL, aber das sollte in M$SQL auch so gehen.
     
  7. Pamps

    Pamps Benutzer

    Super hat geklappt! Danke dir!
     
  8. Pamps

    Pamps Benutzer

    Oh eine Frage ergibt sich nun noch:

    sum(case when datepart(hh,moment) = 8 and bezahlt = 1 then bezahlt else 0 end) as "nicht Ö-Zeiten"

    wie kann ich jetzt noch sagen 8 oder 20 beim intervall?
     
  9. ukulele

    ukulele Datenbank-Guru

    Wenn du nur 2 Varianten hast kannst du theoretisch statt mit CASE auch mit UNION arbeiten:
    Code:
    SELECT    stunde,
            '' AS info
    FROM    pamps
    WHERE    stunde != 3
    AND        cond != 3
    UNION ALL
    SELECT    stunde,
            'Hallo?' AS info
    FROM    pamps
    WHERE    stunde = 3
    AND        cond = 3
    Du musst nur aufpassen das dir keine Fälle entgehen (z.B. NULL-Werte in einer der Spalten).

    Code:
    sum(case when ( datepart(hh,moment) = 8 or datepart(hh,moment) = 20 ) and bezahlt = 1 then bezahlt else 0 end) as "nicht Ö-Zeiten"
     
  10. akretschmer

    akretschmer Datenbank-Guru

    Zum Beispiel so:

    Code:
    test=*# select * from pamps ;
     stunde | cond
    --------+------
      1 |  3
      3 |  4
      5 |  6
    (3 rows)
    
    Time: 0,167 ms
    test=*# select *, case when stunde in (1,3) then 'huhu' else 'nö' end from pamps ;
     stunde | cond | case
    --------+------+------
      1 |  3 | huhu
      3 |  4 | huhu
      5 |  6 | nö
    (3 rows)
    
     
  11. Pamps

    Pamps Benutzer

    alles klar, Danke!
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden