CASE WHEN Befehl in WHERE einbinden

KäptnFragezeichen

Grünschnabel
Hallo,
als absoluter SQL-Neuling habe ich einen Code an die Hand bekommen, den ich wie folgt umgebaut habe, jedoch leider nicht funktioniert. Die neu eingepflegten Codezeilen habe ich fett markiert.
Ziel meiner Abfrage sollte sein, dass wenn die Abfrage am Montag erfolgt, sollen die Freitags-Daten gezogen werden, ansonsten immer die Vortagesdaten.
Könnt Ihr mir erklären, wie es richtig funktioniert, das wäre grandios?
Hier der Code:

SET LANGUAGE US_ENGLISH
SELECT mki_cds_composites.Date, mki_cds.Ticker, mki_cds.Shortname, mki_cds.Region, mki_cds.Ccy, mki_cds.Tier, mki_cds.Sector, mki_cds_composites.Spread1Y, mki_cds_composites.Spread2Y, mki_cds_composites.Spread3Y, mki_cds_composites.Spread4Y, mki_cds_composites.Spread5Y, mki_cds_composites.Spread7Y, mki_cds_composites.Spread10Y, mki_cds_composites.Spread15Y, mki_cds_composites.Spread20Y, mki_cds_composites.Spread30Y, mki_cds_composites.Recovery
FROM mki_cds_composites
INNER JOIN mki_cds mki_cds
ON mki_cds.cds_id = mki_cds_composites.cds_id
WHERE
CASE WHEN DATENAME(weekday, GETDATE())='Monday'
THEN mki_cds_composites.Date=CONVERT(CHAR(11),getdate()-3
ELSE mki_cds_composites.Date=CONVERT(CHAR(11),getdate()-1
END

AND (mki_cds.Region='Europe')
AND (mki_cds.Ccy='EUR')
AND (mki_cds.DocClause='MM')
AND (mki_cds_composites.Spread10Y IS NOT NULL) )
ORDER BY mki_cds.Shortname, mki_cds.Tier

Vielen Dank!
 
Hallo,

CASE WHEN .. END ist ein geschlossener Ausdruck siehe auch hier.

In deinem WHERE Teil fehlt einfach die Bedingung Du prüft im CASE das Datum ab und springst ggf. Tage zurück aber welcher Bedigung soll das ganze entsprechen?

zB könnte da stehen

WHERE
CASE WHEN DATENAME(weekday, GETDATE())='Monday'
THEN getdate()-3
ELSEgetdate()-1
END = '2007-11-27'

Ohne dem = nach dem END vom CASE gibt es eine Fehlermeldung. Kannst auch den ganzen CASE ...END als Spalte in den SELECT nehmen und sehen was rasu kommt.
 
Hallo,

@marbe dein Ansatz ist richtig, aber du vergleichst getdate(), das hh:mm:ss enthält mit einem Datum, das keine Stunden. usw. enthält.

@KäptnFragezeichen
So ist die Bedingung:
Code:
WHERE
CASE WHEN DATENAME(weekday, Erstellungsdatum) = 'Monday' 
THEN CONVERT(CHAR(11), getdate() - 3) 
ELSE CONVERT(CHAR(11), getdate() - 1) 
END = mki_cds_composites.Date
 
Ja @Bernd1984 da hast Recht hatte auch nicht versucht ein 100%ig lauffähiges Statement zu schreiben wollte ja nur ein Tipp geben.
Und ganz genau genommen liefert gedate() das zurück 2007-11-29 12:37:13.487
mit Millisekunden.

Theoretisch kann man auch die Zeitzone berücksichtigen mit getutcdate().
Beim CONVERT sollte noch berücksichtig werden, welches Format eingestellt ist, da es sinst zu unschönen Effekten kommen kann. (Also nur wer es so genau nimmt).

Hier ein Link wer sich weiter interessiert.

Und ich glaube die Liste wäre endlos jetzt ;) Ein bißchen muss jeder noch selbst machen insbesondere bei SQL sollte man nich Blind abtippen, also natürlich nur wenn man seine Daten noch braucht ;)
 
ja @marbe, auf den ersten Blick sieht das so aus, das ich das mit dem Convert nicht so genau genommen habe.

Aber KäptnFragezeichen hat in seinem SQL die Sprache gesetzt.
SET LANGUAGE US_ENGLISH
Daher gibt es hier keine Probleme beim convert.

Wenn die Sprache nicht auf US_ENGLISH gesetzt wird, kann oder wird nicht das gewünschte Ergebnis herrauskommen.
:) Spass muss sein.:)

Können wir nur hoffen, das KäptnFragezeichen das hier auch liest. Denn seit einer Anmeldung (27.11.) und dem Post (27.11.) wurde er noch nicht wieder im Forum gesichtet.
 
Hallo Bernd,

ach Menno, hab ich das SET LANGUAGE übersehen. Wie peinlich ;)

Ja da hast Du Recht. Sowas mag ich immer so, irgenwas fragen und dann kein Feedback geben. Oder gar noch aufregen wenn es nicht gleich klappt.

Denke mal der Thread kann dann zu.
 
Hallo zusammen,

tut mir Leid, dass ich mich jetzt erst melde, aber bin heute erst wieder an meinem Arbeitsplatz. Danke Euch, Ihr habt mir geholfen, ich habe das Problem soweit auch durch Eure Hilfe in den Griff bekommen.
Beim nächsten Mal werde ich Euch wesentlich früher Feedback geben, dann muss sich marbe auch nicht aufregen und kann entspannt Weihnachten feiern.

Viele Grüße, KäptnFragezeichen
 

Neue Beiträge

Zurück