Bedingungen im Select

Pamps

Benutzer
Beiträge
6
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.
 
Werbung:
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.


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)
 
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.
 
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.

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)
 
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?
 
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"
 
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?

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)
 
Werbung:
Zurück
Oben