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

Consulta para calcular ventas por mes(Comparativo)

Estas en el tema de Consulta para calcular ventas por mes(Comparativo) en el foro de SQL Server en Foros del Web. tengo esta consulta hecha: SELECT Products.ProductName, SUM([Order Details].UnitPrice * [Order Details].Quantity) AS Enero, SUM([Order Details].UnitPrice * [Order Details].Quantity) AS Febrero, SUM([Order Details].UnitPrice * [Order Details].Quantity) ...
  #1 (permalink)  
Antiguo 06/04/2011, 17:41
 
Fecha de Ingreso: abril-2011
Ubicación: Morazan
Mensajes: 27
Antigüedad: 13 años
Puntos: 0
Consulta para calcular ventas por mes(Comparativo)

tengo esta consulta hecha:
SELECT Products.ProductName, SUM([Order Details].UnitPrice * [Order Details].Quantity) AS Enero,
SUM([Order Details].UnitPrice * [Order Details].Quantity) AS Febrero,
SUM([Order Details].UnitPrice * [Order Details].Quantity) AS Marzo
,SUM([Order Details].UnitPrice * [Order Details].Quantity) AS Abril
,SUM([Order Details].UnitPrice * [Order Details].Quantity) AS Mayo
,SUM([Order Details].UnitPrice * [Order Details].Quantity) AS Junio
,SUM([Order Details].UnitPrice * [Order Details].Quantity) AS Julio
,SUM([Order Details].UnitPrice * [Order Details].Quantity) AS Agosto
,SUM([Order Details].UnitPrice * [Order Details].Quantity) AS Septiembre
,SUM([Order Details].UnitPrice * [Order Details].Quantity) AS Octubre
,SUM([Order Details].UnitPrice * [Order Details].Quantity) AS Noviembre
,SUM([Order Details].UnitPrice * [Order Details].Quantity) AS Diciembre
FROM [Order Details] INNER JOIN
Products ON [Order Details].ProductID = Products.ProductID INNER JOIN
Orders ON [Order Details].OrderID = Orders.OrderID
WHERE (YEAR(Orders.OrderDate) = 1997) AND (MONTH(Orders.OrderDate) = 2)

GROUP BY Products.ProductName
ORDER BY Products.ProductName

**pero solo me evalua el mes dos en ese where y yo pues necesito que me evalue por cada operacion, que me muestre el resultado por cada mes
y que tenga ese formato
[productos][Enero][Febrero][Marzo][Abril][Mayo][Junio][Julio][Agosto]hasta...[Diciembre]

pues es una tarea en la que se nos pide comparacion de la venta de cada producto en cada mes del año para determinar en que mes se vende menos y y en que mes se vende mas?
  #2 (permalink)  
Antiguo 07/04/2011, 11:36
 
Fecha de Ingreso: junio-2006
Mensajes: 109
Antigüedad: 17 años, 10 meses
Puntos: 2
Respuesta: Consulta para calcular ventas por mes(Comparativo)

Primero creas una funcion:

Código SQL:
Ver original
  1. IF OBJECT_ID (N'dbo.ProductResultByMonth', N'FN') IS NOT NULL
  2.     DROP FUNCTION dbo.ProductResultByMonth;
  3. GO
  4. CREATE FUNCTION dbo.ProductResultByMonth(@ProductId INT, @YEAR INT, @MONTH INT)
  5. RETURNS DECIMAL
  6. WITH EXECUTE AS CALLER
  7. AS
  8. BEGIN
  9.      DECLARE @RESULT DECIMAL;
  10.  
  11. SELECT
  12.     @RESULT = SUM([ORDER Details].UnitPrice * [ORDER Details].Quantity)
  13. FROM
  14.     Products
  15. INNER JOIN
  16.     [ORDER Details]
  17. ON
  18.     [ORDER Details].ProductID = Products.ProductID
  19. INNER JOIN
  20.     Orders
  21. ON
  22.     [ORDER Details].OrderID = Orders.OrderID
  23. WHERE
  24.     Products.ProductID = @ProductId AND
  25.     YEAR(Orders.OrderDate) = @YEAR AND
  26.     MONTH(Orders.OrderDate) = @MONTH
  27.  
  28.      RETURN(ISNULL(@RESULT,0));
  29. END;
  30. GO

Luego para lograr el formato que requieres utilizas la funcion:

Código SQL:
Ver original
  1. DECLARE @YEAR INT
  2. SET @YEAR = 1997
  3.  
  4. SELECT
  5. ProductName,
  6. dbo.ProductResultByMonth(ProductID, @YEAR, 1) Enero,
  7. dbo.ProductResultByMonth(ProductID, @YEAR, 2) Febrero,
  8. dbo.ProductResultByMonth(ProductID, @YEAR, 3) Marzo,
  9. dbo.ProductResultByMonth(ProductID, @YEAR, 4) Abril,
  10. dbo.ProductResultByMonth(ProductID, @YEAR, 5) Mayo,
  11. dbo.ProductResultByMonth(ProductID, @YEAR, 6) Junio,
  12. dbo.ProductResultByMonth(ProductID, @YEAR, 7) Julio,
  13. dbo.ProductResultByMonth(ProductID, @YEAR, 8) Agosto,
  14. dbo.ProductResultByMonth(ProductID, @YEAR, 9) Septiembre,
  15. dbo.ProductResultByMonth(ProductID, @YEAR, 10) Octubre,
  16. dbo.ProductResultByMonth(ProductID, @YEAR, 11) Noviembre,
  17. dbo.ProductResultByMonth(ProductID, @YEAR, 12) Diciembre
  18. FROM
  19.     Products (nolock)

Suerte
  #3 (permalink)  
Antiguo 07/04/2011, 14:58
 
Fecha de Ingreso: abril-2011
Ubicación: Morazan
Mensajes: 27
Antigüedad: 13 años
Puntos: 0
Respuesta: Consulta para calcular ventas por mes(Comparativo)

Cita:
Iniciado por juantiva Ver Mensaje
Primero creas una funcion:

Código SQL:
Ver original
  1. IF OBJECT_ID (N'dbo.ProductResultByMonth', N'FN') IS NOT NULL
  2.     DROP FUNCTION dbo.ProductResultByMonth;
  3. GO
  4. CREATE FUNCTION dbo.ProductResultByMonth(@ProductId INT, @YEAR INT, @MONTH INT)
  5. RETURNS DECIMAL
  6. WITH EXECUTE AS CALLER
  7. AS
  8. BEGIN
  9.      DECLARE @RESULT DECIMAL;
  10.  
  11. SELECT
  12.     @RESULT = SUM([ORDER Details].UnitPrice * [ORDER Details].Quantity)
  13. FROM
  14.     Products
  15. INNER JOIN
  16.     [ORDER Details]
  17. ON
  18.     [ORDER Details].ProductID = Products.ProductID
  19. INNER JOIN
  20.     Orders
  21. ON
  22.     [ORDER Details].OrderID = Orders.OrderID
  23. WHERE
  24.     Products.ProductID = @ProductId AND
  25.     YEAR(Orders.OrderDate) = @YEAR AND
  26.     MONTH(Orders.OrderDate) = @MONTH
  27.  
  28.      RETURN(ISNULL(@RESULT,0));
  29. END;
  30. GO

Luego para lograr el formato que requieres utilizas la funcion:

Código SQL:
Ver original
  1. DECLARE @YEAR INT
  2. SET @YEAR = 1997
  3.  
  4. SELECT
  5. ProductName,
  6. dbo.ProductResultByMonth(ProductID, @YEAR, 1) Enero,
  7. dbo.ProductResultByMonth(ProductID, @YEAR, 2) Febrero,
  8. dbo.ProductResultByMonth(ProductID, @YEAR, 3) Marzo,
  9. dbo.ProductResultByMonth(ProductID, @YEAR, 4) Abril,
  10. dbo.ProductResultByMonth(ProductID, @YEAR, 5) Mayo,
  11. dbo.ProductResultByMonth(ProductID, @YEAR, 6) Junio,
  12. dbo.ProductResultByMonth(ProductID, @YEAR, 7) Julio,
  13. dbo.ProductResultByMonth(ProductID, @YEAR, 8) Agosto,
  14. dbo.ProductResultByMonth(ProductID, @YEAR, 9) Septiembre,
  15. dbo.ProductResultByMonth(ProductID, @YEAR, 10) Octubre,
  16. dbo.ProductResultByMonth(ProductID, @YEAR, 11) Noviembre,
  17. dbo.ProductResultByMonth(ProductID, @YEAR, 12) Diciembre
  18. FROM
  19.     Products (nolock)

Suerte
gracias, siento molestarte pero no me esta mostrando resultados con decimales que debo sustituir para que lo haga? ademas que significa "Products (nolock)"

Última edición por diegohalbo; 07/04/2011 a las 15:22
  #4 (permalink)  
Antiguo 07/04/2011, 16:25
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Consulta para calcular ventas por mes(Comparativo)

Con el permiso

En la funcion, hay una multiplicacion

SUM([ORDER Details].UnitPrice * [ORDER Details].Quantity)

¿Que tipo de datos son ambos?

De ser enteros, deberias utilizar algo como CAST DECIMAL.

nolock = no bloquear
__________________
MCTS Isaias Islas
  #5 (permalink)  
Antiguo 07/04/2011, 23:23
 
Fecha de Ingreso: abril-2011
Ubicación: Morazan
Mensajes: 27
Antigüedad: 13 años
Puntos: 0
Respuesta: Consulta para calcular ventas por mes(Comparativo)

Cita:
Iniciado por iislas Ver Mensaje
Con el permiso

En la funcion, hay una multiplicacion

SUM([ORDER Details].UnitPrice * [ORDER Details].Quantity)

¿Que tipo de datos son ambos?

De ser enteros, deberias utilizar algo como CAST DECIMAL.

nolock = no bloquear
donde iria el cast decimal precisamente?

Etiquetas: Ninguno
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:42.