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.

Preguntas similare

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.
Respuesta Responder a este mensaje
#2 Jose Mariano Alvarez
06/03/2007 - 17:20 | Informe spam
Eso lo resuelves mucho mejor con OLAP y MDX ya que es totalmente nativo y
esta diseñado para ese tipo de consultas.




Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)




wrote in message
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.
Respuesta Responder a este mensaje
#3 etragu
06/03/2007 - 17:24 | Informe spam
Buenas
tengo una bbdd en modo recuperacion sencillo, y un dts que a partir de ayer
empezo a dar un error al importar una tabla, el error dice que esta lleno el
registro de transacciones y que debo hacer un respaldo!!
probe cambiando el modo de recuperacion a completo y haciendo ilimitado el
tamaño del log, pero lo mismo sale el error, lo volvi a pasar a sencillo y
sigue el mismo problema
se me ocurre que se debe haber roto algun archivo de sistema o algo asi

Alguna idea?

gracias
Respuesta Responder a este mensaje
#4 globatoar
06/03/2007 - 17:54 | Informe spam
Muchas gracias a Maxi y Jose!

Jose, tienes algún ejemplo o me puedes indicar donde conseguir
información sobre lo que comentas de OLAP y MDX, para aplicarlo a mi
caso?
Muchas gracias,

Guido.-


On 6 mar, 13:20, "Jose Mariano Alvarez"
wrote:
Eso lo resuelves mucho mejor con OLAP y MDX ya que es totalmente nativo y
esta diseñado para ese tipo de consultas.


Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)
Respuesta Responder a este mensaje
#5 Alejandro Mesa
06/03/2007 - 17:55 | Informe spam
Trata:

use northwind
go

declare @d1 datetime
declare @d2 datetime

set @d1 = '19980605'
set @d2 = dateadd(month, -12, @d1)

select
year(t.d) as y,
month(t.d) as m,
count(o.orderid) as cnt
from
(
select
dateadd(month, a.m, b.dt) as d
from
(
select 0 as m
union all
select 1 as m
union all
select 2 as m
union all
select 3 as m
union all
select 4 as m
union all
select 5 as m
union all
select 6 as m
union all
select 7 as m
union all
select 8 as m
union all
select 9 as m
union all
select 10 as m
union all
select 11 as m
) as a
cross join
(
select convert(varchar(6), @d2, 112) + '01' as dt
) as b
) as t(d)
left join
dbo.orders as o
on convert(char(6), o.orderdate, 112) = convert(char(6), t.d, 112)
group by
year(t.d),
month(t.d)
order by
y, m
go


AMB


"" wrote:

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.


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida