¿Cómo agrupar la información de manera bimestral y anual en una misma vista?

publicado por: Anonymous

Tengo el siguiente enunciado:

Crear una vista que muestre la cantidad de productos vendidos por año y bimestre. Año, Bimestre, Total

Esta es una imagen de mi modelo de tablas en la base de datos:

introducir la descripción de la imagen aquí

He creado esta vista por el momento. Aquí está el DDL:

create view ventas as
select p.Name as producto ,s.OrderQty, s.ProductID, sum(s.OrderQty) as total,sh.OrderDate 
from SalesOrderHeader sh 
join SalesOrderDetail s on sh.SalesOrderID=s.SalesOrderID 
join Product p on s.ProductID=p.ProductID
group by p.Name,s.OrderQty, s.ProductID, sh.OrderDate

Mi problema es que no sé cómo agrupar las ventas de los productos por año y por bimestre, por año podría ser usando YEAR pero para el bimestre no sé. He leído que podría hacerse usando un case, pero no sé cómo definirlo.

¿Alguien tendrá una idea de cómo conseguir ese resultado a partir de la consulta que tengo?

solución

Conseguir el bimestre no es directo

Crear periodos de Meses,Bimestres,Trimestres, Cuatrimestres,Semestres,Anualidad.

es interesante ver como hace uso del CASE..WHEN para ver en que bimestre cae cada mes del año y esto lo usa en el GROUP BY

Esa consule aplica el EXTRACT, pero en sql server no va a funcionar, por eso hay que cambiarlo al DATEPART, algo como ser

...
GROUP BY DATEPART (YEAR, sh.OrderDate)
CASE 
    WHEN DATEPART (MONTH, sh.OrderDate) BETWEEN 1 AND 2 THEN 'B01' 
    WHEN DATEPART (MONTH, sh.OrderDate) BETWEEN 3 AND 4 THEN 'B02'
    WHEN DATEPART (MONTH, sh.OrderDate) BETWEEN 5 AND 6 THEN 'B03'
    WHEN DATEPART (MONTH, sh.OrderDate) BETWEEN 7 AND 8 THEN 'B04' 
    WHEN DATEPART (MONTH, sh.OrderDate) BETWEEN 9 AND 10 THEN 'B05'
    WHEN DATEPART (MONTH, sh.OrderDate) BETWEEN 11 AND 12 THEN 'B06'
END
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *