Errore sintassi case when

giovedì 02 ottobre 2008 - 09.58

trinity Profilo | Guru

Scrivo una cosa del genere :

case datapartenza When > '30/06/2008' then dbo.GetLastDateOfMounth(dataarrivo)END

mi da errore in prossimità del segno ">"

io pratica devo dire che se la data di partenza ha un valore superiore al 30 giugno, deve eseguirmi la funzione che mi restituisce l'ultimo giorno del mese della data di arrivo.

Dove sbaglio?

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

ale.orma Profilo | Junior Member

Prova così:
case When datapartenza > '30/06/2008' then dbo.GetLastDateOfMounth(dataarrivo)END

lbenaglia Profilo | Guru

>Prova così:
>case When datapartenza > '30/06/2008' then dbo.GetLastDateOfMounth(dataarrivo)END

Ancora meglio:

... CASE WHEN DataPartenza > '20080630' THEN dbo.GetLastDateOfMounth(dataarrivo) ELSE .... END ....

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

trinity Profilo | Guru

Ho scritto così:

CASE
WHEN DataPartenza > '20080630' THEN dbo.GetLastDateOfMounth(dataarrivo)
END

e mi dice.

Specificata espressione di tipo non booleano in un contesto in cui è prevista una condizione, in prossimità di 'END'.

precisamente tutta la query è la seguente:

SELECT [IdDb] ,[progschedina] ,[codalbergo] ,[codcomalbergo] ,[DataArrivo] ,[DataPartenza] ,[IdStato] ,[IdComune] ,[IdGruppo] ,[FlagRiporto] FROM [Statistica].[dbo].[Archivio_mov_new] where dataarrivo between '01/06/2008' and '30/06/2008' and CASE WHEN DataPartenza > '20080630' THEN dbo.GetLastDateOfMounth(dataarrivo) END


ma dopo il case non va un'espressione?
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

ale.orma Profilo | Junior Member

SELECT [IdDb]
,[progschedina]
,[codalbergo]
,[codcomalbergo]
,[DataArrivo]
,[DataPartenza]
,[IdStato]
,[IdComune]
,[IdGruppo]
,[FlagRiporto]
FROM [Statistica].[dbo].[Archivio_mov_new]
where dataarrivo between '01/06/2008' and '30/06/2008' and dataarrivo =(CASE
WHEN DataPartenza > '20080630' THEN dbo.GetLastDateOfMounth(dataarrivo)
END)

All'interno del CASE dovresti anche prevedere una condizione da mettere in ELSE, altrimenti quando la condizione DataPartenza > '20080630' non si verifica ti ritorna NULL e la query non ti restituisce più quello che ti aspetti.

trinity Profilo | Guru

ok grazie
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

lbenaglia Profilo | Guru

>where dataarrivo between '01/06/2008' and '30/06/2008' and CASE
>WHEN DataPartenza > '20080630' THEN dbo.GetLastDateOfMounth(dataarrivo)
> END

Questa clausola WHERE non ha semplicemente senso.
Ora, come ti ripeto da sempre, se vuoi ottenere una risposta posta tutto quello che serve (comandi DDL di CREATE, righe di prova INSERT e result set finale).

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

ale.orma Profilo | Junior Member

di nulla, ciao!

lbenaglia Profilo | Guru

>where dataarrivo between '01/06/2008' and '30/06/2008' and dataarrivo
>=(CASE
>WHEN DataPartenza > '20080630' THEN dbo.GetLastDateOfMounth(dataarrivo)
>END)

Occhio al formato delle date e comunque non capisco il significato di questa WHERE...

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

trinity Profilo | Guru

Si hai ragione appunto ho modificato la where molto meglio...

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5