Consulta de totales sin saltar valores intermedios

06/03/2007 - 16:09 por globatoar | Informe spam
Hola grupo, tengo el presente interrogante:
Deseo obtener el total de venta por mes para los doce meses anteriores
a una fecha, para lo cual realizo la siguiente consulta:

"Declare @Fecha VarChar(8)

Select Top 12 Mes, Sum(Monto) as Total
From

(Select year(Fecha) + '/' + Month(Fecha) as Mes, Monto

From Ventas Where Fecha <= @Fecha) As Q1



Group by Mes
Order by Mes Desc"

Esto funciona bien y resuelve mi problema, salvo que cuando no hay
datos de un mes en particular (porque no se ha vendido nada en ese
periodo), la consulta no arroja nada para ese mes y pasa al siguiente,
mientras lo que yo necesito es que coloque el mes con total cero,
manteniéndose dentro de los doce inmediatos anteriores.

Cómo es posible hacer esto?
Lo primero que se me ocurre es crear una tabla auxiliar con todos los
meses posibles para unir con la de la consulta de modo que no se
escape ninguno, pero no me parece que sea lo más eficiente.
Muchas gracias.
 

Leer las respuestas

#1 Maxi
06/03/2007 - 16:38 | Informe spam
Hola, para poder hacer eso podrias por ej crear una tabla de meses donde
indicas 1,2,3,,,,12 y esa tabla haces un join contra este resultado, en los
que no haya coincidencia pondra null que lo puedes convertir a un valor
usando isnull(campo,0)

escribió en el mensaje
news:
Hola grupo, tengo el presente interrogante:
Deseo obtener el total de venta por mes para los doce meses anteriores
a una fecha, para lo cual realizo la siguiente consulta:

"Declare @Fecha VarChar(8)

Select Top 12 Mes, Sum(Monto) as Total
From

(Select year(Fecha) + '/' + Month(Fecha) as Mes, Monto
From Ventas Where Fecha <= @Fecha) As Q1



Group by Mes
Order by Mes Desc"

Esto funciona bien y resuelve mi problema, salvo que cuando no hay
datos de un mes en particular (porque no se ha vendido nada en ese
periodo), la consulta no arroja nada para ese mes y pasa al siguiente,
mientras lo que yo necesito es que coloque el mes con total cero,
manteniéndose dentro de los doce inmediatos anteriores.

Cómo es posible hacer esto?
Lo primero que se me ocurre es crear una tabla auxiliar con todos los
meses posibles para unir con la de la consulta de modo que no se
escape ninguno, pero no me parece que sea lo más eficiente.
Muchas gracias.

Preguntas similares