Utilizzo case-when

lunedì 23 maggio 2011 - 10.46
Tag Elenco Tags  SQL Server 2008 R2

stena Profilo | Junior Member

Ciao a tutti, in una sp devo seguire una divisione.
Il il campo divisore puo` assumere valore zero oppure null.
Dovrebbe essere una cosa tipo
/ case campo when 0 then 1
case campo when null then 1
else utilizza valore campo letto dalla select.

Solamente non riesco a trovare la sintassi corretta.
Suggerimenti ?

Grazie in anticipo.

alx_81 Profilo | Guru

>Ciao a tutti, in una sp devo seguire una divisione.
Ciao

>Il il campo divisore puo` assumere valore zero oppure null.
>Dovrebbe essere una cosa tipo
> / case campo when 0 then 1
> case campo when null then 1
> else utilizza valore campo letto dalla select.
>
>Solamente non riesco a trovare la sintassi corretta.
>Suggerimenti ?
prova così:
DECLARE @Dividendo decimal(8,2) = 10.5 DECLARE @Divisore decimal(8,2) = 3.0 SELECT Risultato = CASE WHEN @Divisore = 0 THEN 1 WHEN @Divisore IS NULL THEN 1 ELSE @Dividendo/@Divisore END GO

>Grazie in anticipo.
di nulla!

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

stena Profilo | Junior Member

Ciao e grazie per la risposta.
Il problema e` che tale campo e` inserito in una select appartenente a una insert into.
Mi spiego:

insert into #tabtemp
select
....
convert(.... / campo) as pippo
from
tabella
...

'campo' appartiene alla tabella su cui viene eseguita la select

Spero di essere stato chiaro.

alx_81 Profilo | Guru

>Ciao e grazie per la risposta.
>Il problema e` che tale campo e` inserito in una select appartenente
>a una insert into.
> Mi spiego:
>
>insert into #tabtemp
>select
>....
>convert(.... / campo) as pippo
>from
>tabella
>...
>
>'campo' appartiene alla tabella su cui viene eseguita la select
non cambia nulla, se c'è la select puoi fare quanto ti ho indicato, sostituendo le variabili coi campi.

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

stena Profilo | Junior Member

Ok. Risolto con

/ (CASE
WHEN campo = 0 THEN 1
WHEN campo IS NULL THEN 1
ELSE campo
END)

grazie.

jenga Profilo | Newbie

puoi fare anche
/ ISNULL(NULLIF(campo, 0), 1)

più figo e meno leggibile, ma fa la stessa cosa.


--
Igor Brusetti
http://jenga.wordpress.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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5