Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-06-2013
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Question Que aparezca la fila con un SUM en cero

Buenas, tengo un dilema, he aquí la consulta

Código SQL [-]
Select s.forma_envio, COALESCE(SUM(s.CANT_EJEMPLARES), 0) AS cant_reserva
From SUSCRIPCIONES s
Where (s.TIPO_SCIONES = 'PAPEL' or s.TIPO_SCIONES = 'PAPEL E INTERNET')
and s.ESTADO_SCIONES = 'A'
and '2013/06/08' BETWEEN s.f_inic_sciones AND s.f_fin_sciones
and s.cod_sucursal = 1
Group by s.forma_envio
Order by s.forma_envio asc

Las formas de envío pueden ser de tres tipos posibles: CORREO, ESTAFETA, RETIRA
La consulta me dice cuantos ejemplares van por cada uno de los tipos, el resultado: tres filas

CORREO 10
ESTAFETA 13
RETIRA 20

El drama se me presenta cuando uno de los tipos no tiene ejemplares en el rango de fechas, supongamos que ESTAFETA no tiene ejemplares en el rango de fechas, lo que yo quiero que presente es:

CORREO 10
ESTAFETA 0
RETIRA 20

Sin embargo, la sql me devuelve

CORREO 10
RETIRA 20

¿Cómo puedo hacer para lograr que ponga ESTAFETA 0?

Gracias, Santiago.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #2  
Antiguo 07-06-2013
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Wink

Ah, el motor es Firebird 2.1. Lo había olvidado.

Gracias.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #3  
Antiguo 07-06-2013
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

Te había propuesto que uses CASE, pero veo que la función COALESCE ya debería hacer lo que necesitas...


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #4  
Antiguo 07-06-2013
aposi aposi is offline
Miembro
 
Registrado: dic 2006
Posts: 146
Poder: 18
aposi Va por buen camino
hola,
tienes alguna tabla con todas las formas de envio??
Responder Con Cita
  #5  
Antiguo 07-06-2013
aposi aposi is offline
Miembro
 
Registrado: dic 2006
Posts: 146
Poder: 18
aposi Va por buen camino
Código SQL [-]

Select distinct a.forma_envio, COALESCE((select sum(s.CANT_EJEMPLARES)
From SUSCRIPCIONES s 
Where (s.TIPO_SCIONES = 'PAPEL' or s.TIPO_SCIONES = 'PAPEL E INTERNET') and s.ESTADO_SCIONES = 'A' and '2013/06/08' BETWEEN s.f_inic_sciones AND s.f_fin_sciones and s.cod_sucursal = 1
and s.forma_envio = a.forma_envio), 0) AS cant_reserva
from SUSCRIPCIONES a 
order by a.forma_envio

Puedes provar este sql a ver como va

Última edición por aposi fecha: 07-06-2013 a las 19:56:11.
Responder Con Cita
  #6  
Antiguo 08-06-2013
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Post

Tienen razón, las formas de envío están en la tabla SUSCRIPCIONES. Esto fue un error que cometí hace años , quedó así y hoy es muy pero muy difícil modificar la BD. Es grande y de un gran uso...

Algo que me funcionó fue esto:
Código SQL [-]
Select COALESCE(SUM(s.CANT_EJEMPLARES), 0) AS CORREO,
  (Select COALESCE(SUM(s.CANT_EJEMPLARES), 0) AS cant_reserva
  From SUSCRIPCIONES s
  Where (s.TIPO_SCIONES = 'PAPEL' or s.TIPO_SCIONES = 'PAPEL E INTERNET')
  and s.ESTADO_SCIONES = 'A'
  and '2013/06/08' BETWEEN s.f_inic_sciones AND s.f_fin_sciones
  and s.cod_sucursal = 1
  and s.forma_envio = 'RETIRA') AS RETIRA,

  (Select COALESCE(SUM(s.CANT_EJEMPLARES), 0) AS cant_reserva
  From SUSCRIPCIONES s
  Where (s.TIPO_SCIONES = 'PAPEL' or s.TIPO_SCIONES = 'PAPEL E INTERNET')
  and s.ESTADO_SCIONES = 'A'
  and '2013/06/08' BETWEEN s.f_inic_sciones AND s.f_fin_sciones
  and s.cod_sucursal = 1
  and s.forma_envio = 'ESTAFETA') AS ESTAFETA

From SUSCRIPCIONES s
Where (s.TIPO_SCIONES = 'PAPEL' or s.TIPO_SCIONES = 'PAPEL E INTERNET')
and s.ESTADO_SCIONES = 'A'
and '2013/06/08' BETWEEN s.f_inic_sciones AND s.f_fin_sciones
and s.cod_sucursal = 1
and s.forma_envio = 'CORREO'
Group by s.forma_envio

Está medio rebuscado, pero cuando alguna de las formas de envío no tiene ejemplares muestra un null, que lo puedo interpretar como "cero"
En lugar de hacer una fila por cada forma de envío, hice una columna (esto no es tan dramático, porque las formas de envío no han cambiado en años)
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #7  
Antiguo 07-06-2013
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Poder: 16
TOPX Va camino a la fama
Buenas,

Aparentemente los distintos valores de FORMA_ENVIO solamente están en esa tabla SUSCRIPCIONES, así que tal vez se pueda haciendo un JOIN de la misma tabla. Algo así:
Código SQL [-]
SELECT S2.FORMA_ENVIO, COALESCE(SUM(S1.CANT_EJEMPLARES), 0) AS CANT_RESERVA
FROM SUSCRIPCIONES S1
LEFT OUTER JOIN (SELECT DISTINCT FORMA_ENVIO FROM SUSCRIPCIONES) AS S2
  ON S1.FORMA_ENVIO = S2.FORMA_ENVIO
WHERE S1.TIPO_SCIONES IN ('PAPEL', 'PAPEL E INTERNET')
  AND S1.ESTADO_SCIONES = 'A'
  AND '2013/06/08' BETWEEN S1.F_INIC_SCIONES AND S1.F_FIN_SCIONES
  AND S1.COD_SUCURSAL = 1
GROUP BY S2.FORMA_ENVIO
ORDER BY S2.FORMA_ENVIO
-
__________________
"constructive mind, destructive thoughts"
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
DBGRID ¿como seleccionar fila y obtener datos de la fila ? JXJ Varios 5 18-04-2017 02:50:14
Como hacer para que en los totales si el valor es Cero aparezca en Blanco oscarac Impresión 1 13-03-2011 02:48:17
seleccionar y modificar fila por fila enMYSQL schaka SQL 14 20-03-2008 06:06:23
Cuando cero - cero es 5.755533321E-13 IVAND Firebird e Interbase 4 12-04-2006 16:06:26
Crystal Reports desde cero, cero, cero. Repelus Impresión 1 08-03-2004 21:23:14


La franja horaria es GMT +2. Ahora son las 04:05:38.


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