Case When Fehler

IchHH

Datenbank-Guru
Beiträge
291
Hallo, ich verstehe nicht warum ich hier einen Syntaxfehler haben. Was haben ich falsch gemacht?

Code:
Case When (Case When Concat(Format(Datepart(DD,GetDate()-1),'00'),'.',Format(Datepart(MM,GetDate()),'00'),'.') = '02.01.' and DATEPART(dw,getdate()) between 1 and 5 then 1) = 1 then 0
            When Concat(Format(Datepart(DD,GetDate()),'00'),'.',Format(Datepart(MM,GetDate()),'00'),'.') = '03.01.' and DATEPART(dw,getdate()) between 1 and 5 then 1 Else 0 End
 
Werbung:
Neuer Ansatz:

Ich versuche eigentlich nur drei Case When Bedingungen zu generieren, dass nichts anderes sagt als

Wenn heute = 02.01. ist und der Wochentag zwischen Mo-Fr liegt dann 1. Der Code dazu sieht wie folgt aus:
Code:
Case When Concat(Format(Datepart(DD,GetDate()),'00'),'.',Format(Datepart(MM,GetDate()),'00'),'.') = '02.01.' and DATEPART(dw,getdate()) between 1 and 5 then 1

Wenn aber der 02.01. kein Tag von Mo-Fr war dann soll er den 03.01. prüfen ob das auf diesen Tag zutrifft. Wenn ja dann 1, wenn aber der 02.01. als Wochentag den Mo-Fr. hatte dann darf die zweite Bedingung nicht zutreffen.

Wenn der 02.01. und der 03.01. kein Mo-Fr waren dann soll er den 04.01. prüfen ob dieser Tag ein Mo-Fr ist, trifft dieses zu muss eine 1 rauskommen
 
also, mal als Demo mit EXTRACT in PostgreSQL. Extract(dow from <a date>) liefert den Wochentag, mit 0 für Sonntag, 1 für Montag, ..., 6 für Sonnabend. Hier mal eine Tabelle mit den jeweiligen 2.1. eines Jahres und einer berechneten Spalte, die immer auf den ersten Wochentag nach(inklusive) dem 2.1. enthält:

Code:
test=*# select *, extract(dow from d) as dow, case when extract(dow from d) = 6 then d+2 else case when extract(dow from d) = 0 then d+1 end end as zieldatum from ich_hh ;
     d      | dow | zieldatum  
------------+-----+------------
 1910-01-02 |   0 | 1910-01-03
 1911-01-02 |   1 |
 1912-01-02 |   2 |
 1913-01-02 |   4 |
 1914-01-02 |   5 |
 1915-01-02 |   6 | 1915-01-04
 1916-01-02 |   0 | 1916-01-03
 1917-01-02 |   2 |
 1918-01-02 |   3 |
 1919-01-02 |   4 |
 1920-01-02 |   5 |
 1921-01-02 |   0 | 1921-01-03
 1922-01-02 |   1 |
 1923-01-02 |   2 |
 1924-01-02 |   3 |
 1925-01-02 |   5 |
 1926-01-02 |   6 | 1926-01-04
 1927-01-02 |   0 | 1927-01-03
 1928-01-02 |   1 |
 1929-01-02 |   3 |
 1930-01-02 |   4 |
 1931-01-02 |   5 |
 1932-01-02 |   6 | 1932-01-04
 1933-01-02 |   1 |
 1934-01-02 |   2 |
 1935-01-02 |   3 |
 1936-01-02 |   4 |
 1937-01-02 |   6 | 1937-01-04
 1938-01-02 |   0 | 1938-01-03
 1939-01-02 |   1 |
 1940-01-02 |   2 |
 1941-01-02 |   4 |
 1942-01-02 |   5 |
 1943-01-02 |   6 | 1943-01-04
 1944-01-02 |   0 | 1944-01-03
 1945-01-02 |   2 |
 1946-01-02 |   3 |
 1947-01-02 |   4 |
 1948-01-02 |   5 |
 1949-01-02 |   0 | 1949-01-03
 1950-01-02 |   1 |
 1951-01-02 |   2 |
 1952-01-02 |   3 |
 1953-01-02 |   5 |
 1954-01-02 |   6 | 1954-01-04
 1955-01-02 |   0 | 1955-01-03
 1956-01-02 |   1 |
 1957-01-02 |   3 |
 1958-01-02 |   4 |
 1959-01-02 |   5 |
 1960-01-02 |   6 | 1960-01-04
 1961-01-02 |   1 |
 1962-01-02 |   2 |
 1963-01-02 |   3 |
 1964-01-02 |   4 |
 1965-01-02 |   6 | 1965-01-04
 1966-01-02 |   0 | 1966-01-03
 1967-01-02 |   1 |
 1968-01-02 |   2 |
 1969-01-02 |   4 |
 1970-01-02 |   5 |
 1971-01-02 |   6 | 1971-01-04
 1972-01-02 |   0 | 1972-01-03
 1973-01-02 |   2 |
 1974-01-02 |   3 |
 1975-01-02 |   4 |
 1976-01-02 |   5 |
 1977-01-02 |   0 | 1977-01-03
 1978-01-02 |   1 |
 1979-01-02 |   2 |
 1980-01-02 |   3 |
 1981-01-02 |   5 |
 1982-01-02 |   6 | 1982-01-04
 1983-01-02 |   0 | 1983-01-03
 1984-01-02 |   1 |
 1985-01-02 |   3 |
 1986-01-02 |   4 |
 1987-01-02 |   5 |
 1988-01-02 |   6 | 1988-01-04
 1989-01-02 |   1 |
 1990-01-02 |   2 |
 1991-01-02 |   3 |
 1992-01-02 |   4 |
 1993-01-02 |   6 | 1993-01-04
 1994-01-02 |   0 | 1994-01-03
 1995-01-02 |   1 |
 1996-01-02 |   2 |
 1997-01-02 |   4 |
 1998-01-02 |   5 |
 1999-01-02 |   6 | 1999-01-04
 2000-01-02 |   0 | 2000-01-03
 2001-01-02 |   2 |
 2002-01-02 |   3 |
 2003-01-02 |   4 |
 2004-01-02 |   5 |
 2005-01-02 |   0 | 2005-01-03
 2006-01-02 |   1 |
 2007-01-02 |   2 |
 2008-01-02 |   3 |
 2009-01-02 |   5 |
 2010-01-02 |   6 | 2010-01-04
 2011-01-02 |   0 | 2011-01-03
 2012-01-02 |   1 |
 2013-01-02 |   3 |
 2014-01-02 |   4 |
 2015-01-02 |   5 |
 2016-01-02 |   6 | 2016-01-04
 2017-01-02 |   1 |
 2018-01-02 |   2 |
 2019-01-02 |   3 |
 2020-01-02 |   4 |
(111 rows)

hilft das?
 
Hallo Akretschmer,

das hat nicht geholfen, zum einen weil bei mir die 1 der Montag ist aber auch weil ich jeden Tag nur diese drei Daten prüfen lassen will und keine Vorausberechnung vornehmen wollte. Ich habe das Problem nun aber tatsächlich mit der CASE WHEN Funktion lösen können.

Trotzdem vielen Dank für den Ansatz.
 
Werbung:
Die "Vorausberechnung" war nur, um Daten zu bekommen. In der Tabelle sind nur die einzelnen Tage gespeichert, im Select erst erfolgt das CASE ... aber okay, Du scheinst ja eine Lösung nun zu haben.
 
Zurück
Oben