Ver Mensaje Individual
  #10 (permalink)  
Antiguo 02/07/2013, 17:40
t0n1
 
Fecha de Ingreso: noviembre-2010
Mensajes: 175
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Query para traer los productos mas caros

Cita:
Iniciado por Libras Ver Mensaje
Código SQL:
Ver original
  1. CREATE TABLE #piezas
  2. (
  3. codigo INT,
  4. nombre VARCHAR(20)
  5. )
  6.  
  7. CREATE TABLE #suministra
  8. (
  9. codigopieza INT,
  10. idproveedor INT,
  11. precio INT
  12. )
  13.  
  14. CREATE TABLE #proveedores
  15. (
  16. id INT,
  17. nombre VARCHAR(20)
  18. )
  19.  
  20. INSERT INTO #piezas VALUES (1,'tornillo')
  21. INSERT INTO #piezas VALUES (2,'martillo')
  22. INSERT INTO #piezas VALUES (3,'cinta')
  23. INSERT INTO #piezas VALUES (4,'tuerca')
  24.  
  25. INSERT INTO #suministra VALUES (1,45,50)
  26. INSERT INTO #suministra VALUES (2,45,250)
  27. INSERT INTO #suministra VALUES (3,45,150)
  28. INSERT INTO #suministra VALUES (4,55,150)
  29.  
  30. INSERT INTO #proveedores VALUES (45,'srl')
  31. INSERT INTO #proveedores VALUES (55,'hmb')
  32.  
  33. SELECT tabla.* FROM(
  34. SELECT t1.codigo,t1.nombre,t2.codigopieza,t2.idproveedor,t2.precio,t3.id,t3.nombre AS proveedor FROM #piezas AS t1
  35. LEFT JOIN #suministra AS t2 ON (t1.codigo=t2.codigopieza)
  36. LEFT JOIN #proveedores AS t3 ON (t2.idproveedor=t3.id)
  37. ) AS tabla
  38.  
  39. LEFT JOIN (SELECT MAX(precio) AS precio,idproveedor FROM #suministra GROUP BY idproveedor) AS tabla2 ON (tabla.precio=tabla2.precio AND tabla.idproveedor=tabla2.idproveedor)
  40. WHERE tabla2.precio IS NOT NULL

Buenísimo, gracias!!!!


Lo que no entiendo es por que esta respuesta que es la que muestra el práctico que estoy realizando, me trae todas las piezas:

Código SQL:
Ver original
  1. SELECT p1.Nombre, pr1.Nombre, Precio
  2. FROM Piezas p1 INNER JOIN
  3. (Suministra s1 INNER JOIN Proveedores pr1
  4. ON s1.IdProveedor = pr1.Id)
  5. ON p1.Codigo = s1.CodigoPieza
  6. WHERE Precio IN
  7. (SELECT MAX(Precio) FROM Suministra s2
  8. GROUP BY s2.CodigoPieza
  9. HAVING s2.CodigoPieza = p1.Codigo)

Última edición por gnzsoloyo; 02/07/2013 a las 19:24 Razón: SQL mal etiquetado