Ver Mensaje Individual
  #6 (permalink)  
Antiguo 08/10/2009, 16:29
ssh
 
Fecha de Ingreso: agosto-2009
Mensajes: 85
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Reemplazar null por cero en select

Haber, paso a explicar más detalladamente el problema:
Código sql:
Ver original
  1. Tabla: public.tabla1
  2.  Columna |         Tipo          | Modificadores
  3. ---------+-----------------------+---------------
  4.  fecha1  | TIMESTAMP             |
  5.  campo1  | INT                   | (PRIMARY KEY)
  6.  
  7.            Tabla: public.tabla2
  8.  Columna |         Tipo          | Modificadores
  9. ---------+-----------------------+---------------
  10.  fecha2  | TIMESTAMP             |
  11.  campo2  | INT                   | (FOREIGN KEY --> tabla1.campo1)
  12. contador | INT                   |
  13.  
  14.            Tabla: public.tabla3
  15.  Columna |         Tipo          | Modificadores
  16. ---------+-----------------------+---------------
  17.  fecha3  | TIMESTAMP             | (PK)
  18.  campo3  | INT                   | (FOREIGN KEY --> tabla1.campo1) / (PK)
  19.  
  20.            Tabla: public.tabla4
  21.  Columna |         Tipo          | Modificadores
  22. ---------+-----------------------+---------------
  23.  fecha4  | TIMESTAMP             | (PK)
  24.  campo4  | INT                   | (FOREIGN KEY --> tabla1.campo1) / (PK)
  25.  
  26.            Tabla: public.tabla5
  27.  Columna |         Tipo          | Modificadores
  28. ---------+-----------------------+---------------
  29.  fecha5  | TIMESTAMP             |
  30.  campo5  | INT                   | (FOREIGN KEY --> tabla1.campo1)
  31.  otro    |

Qué necesito de estas tablas?

Fecha | COUNT(campo2) | COUNT(campo3) | COUNT(campo4) | SUM(campo5)

Utilizo dos fechas para buscar en un periodo. Cómo lo intento resolver?

Código sql:
Ver original
  1. SELECT DISTINCT c2.fec2, c2.camp2, c3.camp3, c4.camp4, c5.camp5 FROM
  2. (SELECT DISTINCT t1.campo1 camp1 FROM public.tabla1 t1 ORDER BY ct.recno) c1,
  3. (SELECT t2.fecha fec2, COUNT(COALESCE(t2.campo2,0)) camp2 FROM public.tabla2 t2 NATURAL INNER JOIN public.tabla1 t1 WHERE t2.fecha BETWEEN '25-08-2009' AND '06-10-2009' GROUP BY t2.fecha ) c2,
  4. (SELECT t3.fecha fec3, COUNT(COALESCE(t3.campo3,0)) camp3 FROM public.tabla3 t3 NATURAL INNER JOIN public.tabla1 t1 WHERE t3.fecha BETWEEN '25-08-2009' AND '06-10-2009' GROUP BY t3.fecha) c3,
  5. (SELECT t4.fecha fec4, COUNT(COALESCE(t4.campo3,0)) camp4 FROM public.tabla4 t4 WHERE t4.fecha BETWEEN '25-08-2009' AND '06-10-2009' GROUP BY t4.fecha) c4,
  6. (SELECT t5.fecha fec5, COALESCE(SUM(t5.campo3), 0)  camp5 FROM public.tabla5 t5 WHERE t5.fecha BETWEEN '25-08-2009' AND '06-10-2009' GROUP BY t5.fecha) c5,
  7. public.tabla2 t2, public.tabla3 t3
  8.       WHERE t2.campo2 = c1.camp1 AND
  9.         t3.campo3 = c1.camp1    
  10.         ORDER BY c2.fec2;

Entrega como resultado:
Código sql:
Ver original
  1. fec2      camp2     camp3     camp4     camp5
  2. ----------------------------------------------------
  3. 04-10-2009    12        8         8          200
  4. 05-10-2009    8         8         8          200 --> Repite el último valor  
  5. 06-10-2009    6         8         8          200 --> Repite el último valor

En el lugar en donde repite el último valor, en realidad no existía registro, pero postgres igual pone el valor anterior, ese es el valor en donde quiero poner un "0" o nada, o algo, me entiendes?