Siis seuraava ongelma tuli vastaan:
Mulla on tilanne raportoinnissa, missä pitäisi saada kahden päivämäärän erotus laskettua. Tämän olen tehnyt DATEFIFF -käskyllä. Erotus näkyy omana sarakkeenaan 'ero'. Lisäksi tarvitsisin omalle sarakkeelleen tekstin, missä näkyy 'AJOISSA' tai 'MYÖHÄSSÄ'.
Yritin saada tätä toimimaan CASE -käskyllä,
Tilanne = CASE WHEN pvm2 < pvm1 THEN 'AJOISSA' ELSE 'MYÖHÄSSÄ' END
Käsky toimi muuten oikein mutta päivämäärien kanssa on sellainen ongelma, että pvm1 näyttää oletuskellonaikana aina 00:00:00 ja pvm2 näyttää todellisen kellonajan. Eli siis vaikka itse päivämäärä olisi sama (kellonaikaa ei siis tarvitsisi ottaa huomioon ollenkaan, mutta se tulee automaattisesti mukaan), tulee tekstiksi 'MYÖHÄSSÄ'.
Mitenköhän saisin joko kellonajan olemaan tulematta ollenkaan tai sitten että päivämäärien erotuksen tarvitsisi olla tarpeeksi suuri, jotta teksti 'MYÖHÄSSÄ' tulee?
Kokeilin myös
Tilanne = CASE WHEN 'ero' < 0 THEN 'AJOISSA' ELSE 'MYÖHÄSSÄ' END
mutta jostain syystä tuo ei toiminut ollenkaan...
Ohjelmana on Microsoft SQL Report Builder. Pahoittelut erittäin huonosti selitetystä ongelmasta, toivottavasti joku tajuaa mitä ajan takaa :D
Ongelman pitäisi ratketa DATEONLY-funktiolla, eli muokkaa ensimmäistä koodiasi seuraavasti: DATEONLY(pvm2) < DATEONLY(pvm1).
Ei toimi... Tulee teksti "tarkista että syntaksi on oikein". Missähän menee vikaan?
Metabolixin vastaus on lienee jollekin muulle RDBMS:lle kuin MSSQL:lle.
Tämän tyylinen syntaksi voisi toimia MSSQL:llä (2008 ja uudemmat):
cast(pvm2 as date) < cast(pvm1 as date)
Ei ihan toiminut taaskaan.. Jos korjasin noin tuohon CASE -kohdan kaavaan, niin ei tullut mitään virhekoodeja, mutta ongelma ei silti korjaantunut...?
Onko muuten mitään mahdollisuutta saada tuota 'AJOISSA' ja 'MYÖHÄSSÄ' tekstiä tulemaan sen mukaan, mikä luku on 'ero' sarakkeessa? Jos se kävisi vähän helpommin...
Ehkä sulla on sitten muuten väärin tuo ehto? Esimerkiksi haluaisit verrata <= mutta olet kirjoittanut <
select pvm1, pvm2, DATEDIFF(D,pvm1,pvm2) ero, CASE WHEN cast(pvm2 as date) < cast(pvm1 as date) THEN 'AJOISSA' ELSE 'MYÖHÄSSÄ' END tilanne from #test
pvm1 pvm2 ero tilanne 2017-08-20 00:00:00.000 2017-08-21 14:27:19.113 1 MYÖHÄSSÄ 2017-08-21 00:00:00.000 2017-08-21 14:27:19.113 0 MYÖHÄSSÄ 2017-08-22 00:00:00.000 2017-08-21 14:27:19.113 -1 AJOISSA
select pvm1, pvm2, DATEDIFF(D,pvm1,pvm2) ero, CASE WHEN cast(pvm2 as date) <= cast(pvm1 as date) THEN 'AJOISSA' ELSE 'MYÖHÄSSÄ' END tilanne from #test
pvm1 pvm2 ero tilanne 2017-08-20 00:00:00.000 2017-08-21 14:27:19.113 1 MYÖHÄSSÄ 2017-08-21 00:00:00.000 2017-08-21 14:27:19.113 0 AJOISSA 2017-08-22 00:00:00.000 2017-08-21 14:27:19.113 -1 AJOISSA
mlj195 kirjoitti:
Onko muuten mitään mahdollisuutta saada tuota 'AJOISSA' ja 'MYÖHÄSSÄ' tekstiä tulemaan sen mukaan, mikä luku on 'ero' sarakkeessa? Jos se kävisi vähän helpommin...
Ei se varsinaisesti sen helpommin käy. Toki voit käyttää sitäkin.
Jos haluat käyttää nimenomaan ero -saraketta niin voit tehdä sen tekemällä näkymän (VIEW) ja kyselyn sille:
WITH Q AS (select pvm1, pvm2, DATEDIFF(D,pvm1,pvm2) ero from #test) SELECT pvm1, pvm2, ero, CASE WHEN ero <= 0 THEN 'AJOISSA' ELSE 'MYÖHÄSSÄ' END tilanne from Q
Tai voit käyttää tuota DATEDIFF -funktiota osana CASEa:
select pvm1, pvm2, DATEDIFF(D,pvm1,pvm2) ero, CASE WHEN DATEDIFF(D,pvm1,pvm2) <= 0 THEN 'AJOISSA' ELSE 'MYÖHÄSSÄ' END tilanne from #test
Nyt sain tuon toimimaan, kiitokset kaikille avusta!
Osaisiko joku vielä selittää miten saisin kentän taustavärin määrättyä kentän arvon perusteella? Eli jos teksti 'MYÖHÄSSÄ' niin taustaväri esim. punainen ja jos 'AJOISSA', niin vihreä?
En ole ko. ohjelmaa käyttänyt, mutta eka osuma Googlella Adding Conditional Formatting (Report Builder 2.0)
Grez kirjoitti:
Metabolixin vastaus on lienee jollekin muulle RDBMS:lle kuin MSSQL:lle.
Luulin, että Report Builderin dokumentaatio koskisi Report Builderilla tehtäviä kyselyitä. Sori siitä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.