Starglazer
Tukijäsen
- Liittynyt
- 17.10.2016
- Viestejä
- 3 765
Kiitos! Kenttien nimet eivät ole todellisia nimiä, keksin esimerkin vuoksi ne.Koko case pitää olla ehdossa:
Koodi:select id , case when group = '1' then StartDate else EndDate end as "Date" from Company where case when group = '1' then StartDate else EndDate end > cast('1.1.2023' as date)
tai select from select:
Koodi:select id, "Date" from ( select id , case when group = '1' then StartDate else EndDate end as "Date" from Company ) d where "Date" > cast('' as date)
Vaihtoehdossa 2 on monissa kannoissa se ongelma että ensin tehdään kysely koko massalle -> tulos "temp" tauluun ja vasta sen jälkeen rivien filtteri. Riippuu optimoijasta ja kannasta.
Vähän offtopic:
Kannattaa myös opetella välttämään yleisimpiä varattuja sanoja kuten tässä Date sarakkeen nimenä. Helpottaa elämää varsinkin jos joskus joutuu käyttämään muita kantoja.
Oletan että StartDate ja EndDate datatyyppi on oikeasti date/datetime/timestamp, silloin kannattaa aina vakioarvo muuttaa oikeaan datatyyppiin eikä antaa kannan tehdä oletusmuunnoksia (esimerkkinä mssql jossa varchar = int vertailussa yritetään yleensä muuttaa varchar -> int eikä toisinpäin).

