PDA

Ver la Versión Completa : Como Validar Filas en Select?


AGAG4
21-12-2005, 17:11:06
Hago 4 consultas unidas con UNION.

//Ventas de Contado
select SUM(IMPORFAC) from facturas
where
credcon=1 and
fechafac>='01.04.2005' and
fechafac<='30.04.2005'
UNION

//Ventas de Credito
select SUM(IMPORFAC) from facturas
where
credcon=2 and
fechafac>='01.04.2005' and
fechafac<='30.04.2005'
UNION

//Notas de Crédito
select SUM(IMPMOV) from climovim
where
(tipomov='NX' or tipomov='NM') and
fechamov>='01.04.2005' and
fechamov<='30.04.2005'
UNION
//Devoluciones
select SUM(IMPORTE) from invmovim
where
(tipomov='DX' or tipomov='DM') and
fechamov>='01.04.2005' and
fechamov<='30.04.2005'

En estas sentencias me muestra 4 FILAS:
1,200
2,200
500
200

Estan perfectas las consultas, pero tengo el problema que si no hay ventas de crédito me pone:
1,200
500
200

No puedo diferenciar entre las filas si no hay Ventas de Crédito o bien no hubiese Notas de Crédito, me gustaría que en vez de que no muestre nada me muestre un CERO asi yo saber de que no hubo Ventas de Crédito ejemplo:
1,200
0
500
200

Ya probe con

....
select SUM(case when (IMPORTE=0 or IMPORTE is Null ) then 0.00 end) from tinv_invmovim
....

Pero de todas formas me devuelve 3 filas, no me muestra en la FILA un CERO para identificar.

Agradezco cualquier sugerencia.

Neftali [Germán.Estévez]
21-12-2005, 17:34:10
Revisa si puedes utilizar el operador IF/CASE/ISNULL dentro de la consulta (algunos SGBD lo tienen).

Por ejemplo en SQL Server podrías usar:


// Si el valor es nulo te devolvería un 0
select IsNull(SUM(IMPORFAC),0) from facturas

// Algo similar, pero con el CASE
select
case when SUM(IMPORFAC) is null then 0 else SUM(IMPORFAC) end
from facturas

AGAG4
21-12-2005, 22:40:03
Gracias Neftali voy a probarlo....

Saludos....

AGAG4
21-12-2005, 22:52:16
Revisa si puedes utilizar el operador IF/CASE/ISNULL dentro de la consulta (algunos SGBD lo tienen).

Por ejemplo en SQL Server podrías usar:


// Si el valor es nulo te devolvería un 0
select IsNull(SUM(IMPORFAC),0) from facturas

// Algo similar, pero con el CASE
select
case when SUM(IMPORFAC) is null then 0 else SUM(IMPORFAC) end
from facturas

En el Primer Ejemplo que me comenta me marca error en IsNull
En el segundo Casi se Aproxima, aqui el problema que tengo es que si de las 4 consultas las 2 del medio son nulas solo me pone:
0.00
1,200
200

En vez de poner
1,200
0.00
0.00
200

O bien si en alguna consulta es nula pone al principio los ceros
0.00
2,200
500
200

Gracias por sus sugerencias.

Paoti
22-12-2005, 20:22:08
¡Hola!

haber si funciona esto:


select SUM(COALESCE(IMPORFAC)), 1 from facturas
where
credcon=1 and
fechafac>='01.04.2005' and
fechafac<='30.04.2005'
UNION
...
UNION
...
UNION
...
ORDER BY 2




COALESCE() <--- Em caso de que el campo sea nulo, lo remplaza por el valor 0. ahora la segunda columna es un 1, en el siguiente SELECT, ponerlo 2, etc...

y al final hacer or ORDER BY por la columna dos.



se me ocurrio al vuelo está solución, espero cumpla su cometido de darle solución a tu problema.



NaCl-U2

AGAG4
23-12-2005, 00:16:04
Gracias Paoti voy a probarlo....

AGAG4
23-12-2005, 00:25:44
Gracias Paoti me Sirvio mucho, no me pone el campo en Ceros, pero eso no importa cuando menos los voy a identificar con un Número que es lo que principalmente quería IDENTIFICARLOS.

Que tengas buen día.

Felices Fiestas!!!!

Paoti
23-12-2005, 00:31:57
Que bueno que te funciono....


Ahora prueba al revez...



Coalesce(Sum(Campo)) From



Aunque deberia de funcionar cómo esta el ejemplo.


jajaj, perdón, ya me di cuenta del error. es este:



Voy a dejar le texto de arriba porque ya lo escribi.

:p


es así


select SUM(COALESCE(IMPORFAC),0), 1 from facturas
where
credcon=1 and
fechafac>='01.04.2005' and
fechafac<='30.04.2005'
UNION
...
UNION
...
UNION
...
ORDER BY 2



select SUM(COALESCE(IMPORFAC),0), <--- AQUI ESTA.




NaCL-U2

AGAG4
23-12-2005, 02:06:31
Gracias Paoti, no se que estará pasando ya probe de la última forma pero sigue saliendo Nulo el campo, pero ese ya no es problema como le comente arriba con sólo identificar el registro sobra y basta.

Gracias de antemano.:)

AGAG4
30-12-2005, 20:05:19
Siempre si ocupe el registro en CEROS y tenía un pequeño error al poner la instrucción COALESCE pero ya me funcionó .


Saludos....:)