Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Consulta SQL no muestra cuando no tiene valores...

Estas en el tema de Consulta SQL no muestra cuando no tiene valores... en el foro de PostgreSQL en Foros del Web. Buenas, estoy trabajando en una query que lee desde mi BD postgres y genera un listado de meses con sus valores asociados. Las consulta corresponden ...
  #1 (permalink)  
Antiguo 26/08/2010, 09:24
Avatar de bLEx  
Fecha de Ingreso: mayo-2008
Ubicación: Villa Alemana, Chile
Mensajes: 181
Antigüedad: 16 años
Puntos: 5
Exclamación Consulta SQL no muestra cuando no tiene valores...

Buenas, estoy trabajando en una query que lee desde mi BD postgres y genera un listado de meses con sus valores asociados. Las consulta corresponden a 1 año, por lo que me deberia mostrar x ej: desde Enero 09 a Enero 10.

El problema es que cuando no presenta registros un mes, no muestra la salida con valor 0, sino que simplemente no colocar la linea. Y como esto da a parar a un grafico anual, necesito tener ese valor con 0.

Aqui les dejo la query y el resultado.
Código:
Select count(CASE WHEN fn.id_tipooperacion=8 THEN 1 END)AS unidades, 
ROUND(SUM(CASE WHEN fn.id_tipooperacion=8 THEN (fn.total_preciopromesa_uf)/1000 END) ) AS VENTABRUTA ,
dt.periodo_corto, dci.region,fn.id_tiempo
FROM fact_negocios as fn, dim_tiempo as dt,dim_comuna as dc,dim_ciudad as dci, dim_tipoproducto as dtp
WHERE fn.id_tiempo= dt.fecha
AND fn.id_comuna_proyecto=dc.id_comuna
AND dc.id_ciudad=dci.id_ciudad
AND fn.id_tiempo BETWEEN '2009-01-01' and '2010-01-01'
AND dci.region='RM'

AND dc.glosa_comuna='la florida'
AND fn.id_tipoproducto=dtp.id_tipoproducto
AND dtp.tipo in ('departamento')
AND dtp.modelo in ('2D 1B')

GROUP BY 
dt.anio,
dt.mes,
dt.periodo_corto,
dci.region,
fn.id_tiempo
ORDER BY 
dt.anio,
dt.mes,
dt.periodo_corto
y el resultado es
3;4;"ENE09";"RM";"2009-01-01"
6;7;"FEB09";"RM";"2009-02-01"
7;9;"MAR09";"RM";"2009-03-01"
2;2;"MAY09";"RM";"2009-05-01"
6;8;"JUL09";"RM";"2009-07-01"
10;13;"AGO09";"RM";"2009-08-01"
1;1;"SEP09";"RM";"2009-09-01"
1;1;"OCT09";"RM";"2009-10-01"
6;10;"NOV09";"RM";"2009-11-01"
4;5;"DIC09";"RM";"2009-12-01"
2;3;"ENE10";"RM";"2010-01-01"

cuando lo que me gustaria lograr es...
3;4;"ENE09";"RM";"2009-01-01"
6;7;"FEB09";"RM";"2009-02-01"
7;9;"MAR09";"RM";"2009-03-01"
0;0;"ABR09";"RM";"2009-04-01"
2;2;"MAY09";"RM";"2009-05-01"
0;0;"JUN09";"RM";"2009-06-01"
6;8;"JUL09";"RM";"2009-07-01"
10;13;"AGO09";"RM";"2009-08-01"
1;1;"SEP09";"RM";"2009-09-01"
1;1;"OCT09";"RM";"2009-10-01"
6;10;"NOV09";"RM";"2009-11-01"
4;5;"DIC09";"RM";"2009-12-01"
2;3;"ENE10";"RM";"2010-01-01"
  #2 (permalink)  
Antiguo 26/08/2010, 09:52
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta SQL no muestra cuando no tiene valores...

bLEx

Por la forma como indexas las tablas en la consulta, no se puede saber si el problema se puede solucionar con un LEFT o RIGHT JOIN.

de no ser así, se tendría que recurrir a una tabla que tenga la información con o sin datos para poder mostrarlos.

De todas formas, mirate esta función Generate_series que podría servirte.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 26/08/2010, 10:22
Avatar de bLEx  
Fecha de Ingreso: mayo-2008
Ubicación: Villa Alemana, Chile
Mensajes: 181
Antigüedad: 16 años
Puntos: 5
Respuesta: Consulta SQL no muestra cuando no tiene valores...

huesos. gracias por la respuesta... aun así logre solucionarlo de otra manera.
Dentro de los CASE coloque todas las condiciones necesarias y en el WHERE las condiciones minimas para que existan los vinculos entre las tablas.

Código:
Select 
count(
	CASE WHEN 
		fn.id_tipooperacion=8 AND 
		fn.id_tiempo BETWEEN '2009-01-01' AND '2010-01-01' AND 
		fn.id_tiempo= dt.fecha AND
		fn.id_comuna_proyecto=dc.id_comuna AND 
		dc.id_ciudad=dci.id_ciudad AND 
		dci.region='RM' AND 
		dc.glosa_comuna='la florida' AND 
		fn.id_tipoproducto=dtp.id_tipoproducto	AND 
		dtp.tipo in ('departamento') AND 
		dtp.modelo in ('2D 1B') 
	THEN 1 END)AS unidades, 
	
ROUND(SUM(
	CASE WHEN 
		fn.id_tipooperacion=8 AND
		fn.id_tiempo BETWEEN '2009-01-01' AND '2010-01-01' AND 
		fn.id_tiempo= dt.fecha AND
		fn.id_comuna_proyecto=dc.id_comuna AND 
		dc.id_ciudad=dci.id_ciudad AND 
		dci.region='RM' AND 
		dc.glosa_comuna='la florida' AND 
		fn.id_tipoproducto=dtp.id_tipoproducto	AND 
		dtp.tipo in ('departamento') AND 
		dtp.modelo in ('2D 1B') 
	THEN (fn.total_preciopromesa_uf)/1000 ELSE 0 END) ) AS VENTABRUTA ,
dt.periodo_corto, dci.region,fn.id_tiempo
FROM fact_negocios as fn, dim_tiempo as dt,dim_comuna as dc,dim_ciudad as dci, dim_tipoproducto as dtp
WHERE
	fn.id_tiempo= dt.fecha AND
	fn.id_comuna_proyecto=dc.id_comuna AND 
	dc.id_ciudad=dci.id_ciudad AND 
	fn.id_tipoproducto=dtp.id_tipoproducto AND 
	fn.id_tiempo BETWEEN '2009-01-01' AND '2010-01-01' AND 
	dci.region='RM'
GROUP BY 
dt.anio,
dt.mes,
dt.periodo_corto,
dci.region,
fn.id_tiempo
ORDER BY 
dt.anio,
dt.mes,
dt.periodo_corto
Gracias, por la ayuda.
Saludos

Etiquetas: query, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:56.