Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/09/2005, 10:07
Tanto
 
Fecha de Ingreso: agosto-2005
Mensajes: 4
Antigüedad: 18 años, 8 meses
Puntos: 0
Información MySQL: SubConsulta con Having

Hola amigos,

Estoy practicando el tema de las subconsultas, pero se me ha complicado cuando intento hacer una subconsulta "grande" por llamarla de alguna manera, y utilizando el Having.

La situacion es la Sgte.
En la base de datos con la cual estoy practicando, tengo entre otras las Sgtes. tablas:
* Products, con los siguientes campos: ProductID, ProductName, UnitPrice
* Order_Details, con los siguientes campos: OrderID, ProductID, UnitPrice, Quantity
* Orders, con los siguientes campos: OrderID, CustomerID, EmployeeID, OrderDate

Lo que pretendo hacer es listar el identificador de producto (productid), su nombre (productname) y el monto anual calculado (sum(od.unitprice * od.quantity)) , de aquellos productos cuyas ventas del año 1998 hayan superado a las realizadas para el mismo producto durante el año 1997.

Entonces lo que pensé que era correcto hacer consiste en calcular primero lo referente a 1998, y luego usar exactamente las mismas sentencias para calcular lo referente a 1997, vinculadas ambas con un Having:

select p.productId, p.productname, sum(od.unitprice*od.quantity) as Monto
from products p inner join order_details od on (p.productID=od.productID) inner join orders o on (o.orderID=od.OrderID)
where year(o.orderdate)=1998
group by p.productID
having monto > (select sum(od1.unitprice*od1.quantity) as Monto1
from products p1 inner join order_details od1 on (p1.productID=od1.productID) inner join orders o1 on (o1.orderID=od1.OrderID)
where year(o1.orderdate)=1997
group by p1.productID)


Pero al ejecutar esto, recibo el Siguiente mensaje de error: "Subquery returns more than 1 row"
Y a pesar de que he tratado, no logro salir de esto...

Por favor, alguien me puede dar alguna idea ?
Recuerden que recien estoy empezando, uso apenas las pocas cosas que se y pretendo aprender bien el tema de las subconsultas y los Join antes de avanzar, por lo que agradeceré que cualquier recomendación que puedan aportar no incluya sentencias mas avanzadas...

Muchas gracias desde ya !, y que terminen bien el fin de semana .