SQLServer me devuelve 0 en una division..

26/08/2005 - 19:34 por Lord Voldemort | Informe spam
Hola a tod@s

en un SP cuando intento realizar una division entre dos campos y el numero
es menor que cero, sql devuelve 0, cuando deveria de ser 0.45
0.53 o 0.83

los tipos de campo son smallmoney o money

Gracias por su atencion..

Voldemort...

Preguntas similare

Leer las respuestas

#6 Lord Voldemort
26/08/2005 - 22:26 | Informe spam
Ale..
y como haria entonces con esto..?

Mostrar la cita
pues tu me das un ejemplo con el resultado pero con los campos como seria?

gracias


"Alejandro Mesa" wrote in message
news:
Mostrar la cita
#7 Alejandro Mesa
26/08/2005 - 22:37 | Informe spam
Trata:

((SUM(dbo.Movimientos.Hembras * 1.00) + SUM(dbo.Movimientos.Machos)) -
(SUM(dbo.Mortalidad.Hembras * 1.00) + SUM(dbo.Mortalidad.Machos))) /
nullif((SUM(dbo.Movimientos.Hembras * 1.00) + SUM(dbo.Movimientos.Machos)))
AS SobreVivencia

Multiplica el valor de la columna por 1.00 y haces una conversion implicita.
Puedes hacerlo en cualquier columna, no necesariamente "hembras". El "nullif"
es para prevenir un error de division por cero.


AMB

"Lord Voldemort" wrote:

Mostrar la cita
#8 Lord Voldemort
27/08/2005 - 00:04 | Informe spam
Excelente Alejandro, funciona Gracias..

sabes eso del nullif.. para que diablos es???
bueno me pasa que a veces al sumar un campo con otro campo que tiene valor
nulo entonces el resultado devuelve nulo aunque uno de los datos contenga un
numero..


saludos..

Voldemort
"Alejandro Mesa" wrote in message
news:
Mostrar la cita
#9 Alejandro Mesa
27/08/2005 - 13:31 | Informe spam
En t-sql, la unica operacion que se puede hacer sobre un valor NULL es el de
comparacion, usando:

expresion is [not] null

donde expresion puede ser desde una columna, hasta una variable.

Ejemplo:

select *
from dbo.orders
where shippeddate is not null

cualquier otra operacion que involucre un valor NULL, dara como resultado
NULL.

Ejemplo:

select cast(null as int) + 1
select cast(null as int) / 1
select cast(null as int) - 1
select cast(null as int) * 1
select 1 where null = null
select 1 where null != null
select 1 where 1 = null
select 1 where 'microsoft' = null
select 1 where 'microsoft' != null

Para evitar un valor NULL en una expresion, puedes usar las funciones ISNULL
o COALESCE, las cuales devuelven un valor x si si el valor en question es
cero. La diferencia entre ambas son:

- isnull devuelve un valor cuyo tipo es igual al tipo de dato del primer
argumento
- coalesce puede tranajar con una lista, devolviendo el primer elemento de
la lista que no es null y ademas el tipo de datos del resultado sera el de
mayor precedencia en la lista

Ejemplo:

select isnull(cast(null as int), 0) + 3
select coalesce(cast(null as int), 0) - 5

Si en una operacion de division, el divisor es cero, sql server dara un error:

select 1 / 0

para evitar esto, podemos usar la funcion NULLIF, la cual devuelve un valor
NULL si el primer argumento es igual al segundo.

select 1 / nullif(0, 0)
select sum(x) / nullif(sum(y), 0) from t


AMB

"Lord Voldemort" wrote:

Mostrar la cita
#10 Lord Voldemort
29/08/2005 - 16:52 | Informe spam
Ok... ahora sip..

gracias..


"Alejandro Mesa" wrote in message
news:
Mostrar la cita
Ads by Google
Search Busqueda sugerida