Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-12-2005
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
Como Validar Filas en Select?

Hago 4 consultas unidas con UNION.
Código SQL [-]
//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
Código SQL [-]
 
....
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.

Última edición por AGAG4 fecha: 21-12-2005 a las 17:26:13. Razón: Corrección
Responder Con Cita
  #2  
Antiguo 21-12-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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:

Código SQL [-]
// 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
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 21-12-2005
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
ok

Gracias Neftali voy a probarlo....

Saludos....
Responder Con Cita
  #4  
Antiguo 21-12-2005
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
Resultados

Cita:
Empezado por Neftali
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:

Código SQL [-]
// 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.
Responder Con Cita
  #5  
Antiguo 22-12-2005
Avatar de Paoti
Paoti Paoti is offline
Miembro
 
Registrado: may 2003
Ubicación: Monterrey. N.L., México
Posts: 612
Poder: 21
Paoti Va por buen camino
coalesce

¡Hola!

haber si funciona esto:

Código SQL [-]
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
__________________
Estudia y anda en la calle.... que asi serás el doble de listo que los demás...

análisis de información
análisis y diseño de sistemas

Paoti Rios Reséndiz
Responder Con Cita
  #6  
Antiguo 23-12-2005
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
Ok

Gracias Paoti voy a probarlo....
Responder Con Cita
  #7  
Antiguo 23-12-2005
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
Excelente

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!!!!
Responder Con Cita
  #8  
Antiguo 23-12-2005
Avatar de Paoti
Paoti Paoti is offline
Miembro
 
Registrado: may 2003
Ubicación: Monterrey. N.L., México
Posts: 612
Poder: 21
Paoti Va por buen camino
Coalesce con SUM SQL

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.




es así

Código SQL [-]
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
__________________
Estudia y anda en la calle.... que asi serás el doble de listo que los demás...

análisis de información
análisis y diseño de sistemas

Paoti Rios Reséndiz
Responder Con Cita
  #9  
Antiguo 23-12-2005
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
Gracias

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.
Responder Con Cita
  #10  
Antiguo 30-12-2005
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
Gracias Paoti

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....
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 22:50:12.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi