Clientes que hayan realizado más de 5 órdenes por año [DB Northwind]

Iniciado por S4ms3pi0l__, 6 Abril 2019, 04:42 AM

0 Miembros y 1 Visitante están viendo este tema.

S4ms3pi0l__

Tengo el siguiente problema: Seleccionar a todos los clientes que hayan realizado más de 5 órdenes por año. Presentar el detalle de las cantidad por año. Ordenar por año.

Esto es lo que yo hice y que no sé si está correcto:

Código (sql) [Seleccionar]

ALTER PROCEDURE SP_TopClientes
AS
CREATE TABLE #HistorialCantidad(
--IdHistorial int primary key identity(0,1),
Nombre varchar(100),
Año int,
Cantidad int
)
CREATE TABLE #Año(
Id int primary key identity(0,1),
Año int
)
INSERT INTO #Año
SELECT DISTINCT YEAR(OrderDate) FROM Orders
DECLARE @Contador int
SET @Contador = 0
WHILE(@Contador < (SELECT COUNT(*) FROM #Año))
BEGIN
INSERT INTO #HistorialCantidad
SELECT DISTINCT TOP 5
c.CompanyName as [Nombre Compañía],
YEAR(o.OrderDate) as Año,
COUNT(*) AS Cantidad
FROM [Order Details] od
INNER JOIN Orders o ON o.OrderID = od.OrderID
INNER JOIN Customers c ON c.CustomerID = o.CustomerID
WHERE YEAR(o.OrderDate) = (SELECT Año from #Año WHERE Id = @Contador)
GROUP BY c.CompanyName, YEAR(o.OrderDate)
ORDER BY Cantidad DESC

SET @Contador = @Contador+1
END
SELECT * FROM #HistorialCantidad ORDER BY Año, Cantidad
DROP TABLE #HistorialCantidad
DROP TABLE #Año


Espero puedan ayudarme.

EdePC

Saludos,

- Yo lo estoy entendiendo así:

-- Seleccionar a todos los clientes que hayan realizado más de 5 órdenes por año.
-- Presentar el detalle de las cantidad por año. Ordenar por año

Código (sql) [Seleccionar]
SELECT
  CustomerID,
  YEAR(OrderDate) AS Año,
  COUNT(OrderID)  AS Cantidad
FROM Orders
GROUP BY YEAR(OrderDate), CustomerID
HAVING COUNT(OrderID) > 5
ORDER BY Año


+------------+------+----------+
| CustomerID | Año  | Cantidad |
+------------+------+----------+
| ERNSH      | 1996 |        6 |
| QUICK      | 1996 |        6 |
| RATTC      | 1996 |        6 |
| AROUT      | 1997 |        7 |
| BERGS      | 1997 |       10 |
| BLONP      | 1997 |        7 |
| BONAP      | 1997 |        8 |
| BSBEV      | 1997 |        6 |
| ERNSH      | 1997 |       15 |
| FOLKO      | 1997 |        7 |
| FRANK      | 1997 |        8 |
| GOURL      | 1997 |        7 |
| GREAL      | 1997 |        6 |
| HILAA      | 1997 |       10 |
| HUNGO      | 1997 |       10 |
| KOENE      | 1997 |        8 |
| LAMAI      | 1997 |        8 |
| LEHMS      | 1997 |        8 |
| MEREP      | 1997 |       10 |
| OTTIK      | 1997 |        6 |
| PICCO      | 1997 |        6 |
| QUEEN      | 1997 |        7 |
| QUICK      | 1997 |       14 |
| RATTC      | 1997 |        6 |
| REGGC      | 1997 |        6 |
| SAVEA      | 1997 |       17 |
| VAFFE      | 1997 |        6 |
| WARTH      | 1997 |       10 |
| WHITC      | 1997 |        8 |
| BONAP      | 1998 |        6 |
| BOTTM      | 1998 |        8 |
| ERNSH      | 1998 |        9 |
| FOLKO      | 1998 |        9 |
| GODOS      | 1998 |        7 |
| HANAR      | 1998 |        7 |
| HILAA      | 1998 |        6 |
| LINOD      | 1998 |        7 |
| QUICK      | 1998 |        8 |
| RATTC      | 1998 |        6 |
| SAVEA      | 1998 |       11 |
| SUPRD      | 1998 |        6 |
+------------+------+----------+

S4ms3pi0l__

Cita de: EdePC en  7 Abril 2019, 03:38 AM
Saludos,

- Yo lo estoy entendiendo así:

-- Seleccionar a todos los clientes que hayan realizado más de 5 órdenes por año.
-- Presentar el detalle de las cantidad por año. Ordenar por año

Código (sql) [Seleccionar]
SELECT
  CustomerID,
  YEAR(OrderDate) AS Año,
  COUNT(OrderID)  AS Cantidad
FROM Orders
GROUP BY YEAR(OrderDate), CustomerID
HAVING COUNT(OrderID) > 5
ORDER BY Año


+------------+------+----------+
| CustomerID | Año  | Cantidad |
+------------+------+----------+
| ERNSH      | 1996 |        6 |
| QUICK      | 1996 |        6 |
| RATTC      | 1996 |        6 |
| AROUT      | 1997 |        7 |
| BERGS      | 1997 |       10 |
| BLONP      | 1997 |        7 |
| BONAP      | 1997 |        8 |
| BSBEV      | 1997 |        6 |
| ERNSH      | 1997 |       15 |
| FOLKO      | 1997 |        7 |
| FRANK      | 1997 |        8 |
| GOURL      | 1997 |        7 |
| GREAL      | 1997 |        6 |
| HILAA      | 1997 |       10 |
| HUNGO      | 1997 |       10 |
| KOENE      | 1997 |        8 |
| LAMAI      | 1997 |        8 |
| LEHMS      | 1997 |        8 |
| MEREP      | 1997 |       10 |
| OTTIK      | 1997 |        6 |
| PICCO      | 1997 |        6 |
| QUEEN      | 1997 |        7 |
| QUICK      | 1997 |       14 |
| RATTC      | 1997 |        6 |
| REGGC      | 1997 |        6 |
| SAVEA      | 1997 |       17 |
| VAFFE      | 1997 |        6 |
| WARTH      | 1997 |       10 |
| WHITC      | 1997 |        8 |
| BONAP      | 1998 |        6 |
| BOTTM      | 1998 |        8 |
| ERNSH      | 1998 |        9 |
| FOLKO      | 1998 |        9 |
| GODOS      | 1998 |        7 |
| HANAR      | 1998 |        7 |
| HILAA      | 1998 |        6 |
| LINOD      | 1998 |        7 |
| QUICK      | 1998 |        8 |
| RATTC      | 1998 |        6 |
| SAVEA      | 1998 |       11 |
| SUPRD      | 1998 |        6 |
+------------+------+----------+


Sí, está perfecto. Al final, creo que, lo terminaste simplificando. Muchas gracias por tu ayuda ;D