2014-07-03 29 views
0

我正在使用SQL Server 2008,需要检查每个订购产品的最低价格。 (2,11,15是supplerid加入多个表时的SQL最低价格

这是查询:

SELECT 
    od.IDPRODUCTO, 
    p.NOMBRE AS DescProd, 
    t.MIN_PRICE, 
    t.IDLIBRERIA, 
    FECHAACTUALIZACION 
FROM 
    ORDERDETAILS od 
JOIN 
    (SELECT 
     rpl.IDPRODUCTO, 
     MIN(PRECIO) AS min_price, 
     rpl.IDLIBRERIA AS idlibreria 
    FROM 
     RELPRODUCTOLIBRERIAS rpl 
    GROUP BY 
     rpl.IDPRODUCTO, rpl.IDLIBRERIA) t ON t.IDPRODUCTO = Od.IDPRODUCTO 
JOIN 
    PRODUCTOS p ON (od.IDPRODUCTO = p.ID) 
LEFT JOIN 
    EDITORIALES e ON (p.IDEDITORIAL = e.ID) 
LEFT JOIN 
    ORDERSTATUSFOLLOWUP osf ON osf.ID = Od.IDSTATUSFOLLOWUP 
WHERE 
    IDORDER = 98770 

返回:

╔════════╦═══════════════════════╦════════╦════╦════════════╗ 
║ 153389 ║ CONCIENCIA- SOCIALES ║ 165.00 ║ 11 ║ 2014-06-27 ║ 
║ 153389 ║ CONCIENCIA - SOCIALES ║ 165.00 ║ 15 ║ 2014-06-27 ║ 
║ 136892 ║ CUENTEME DON SEGUNDO ║ 70.00 ║ 2 ║ 2014-06-27 ║ 
║ 136892 ║ CUENTEME DON SEGUNDO ║ 50.00 ║ 11 ║ 2014-06-27 ║ 
║ 136892 ║ CUENTEME DON SEGUNDO ║ 70.00 ║ 15 ║ 2014-06-27 ║ 
╚════════╩═══════════════════════╩════════╩════╩════════════╝ 

我需要这样的结果:

╔════════╦═══════════════════════╦════════╦════╦════════════╗ 
║ 153389 ║ CONCIENCIA - SOCIALES ║ 165.00 ║ 11 ║ 2014-06-27 ║ 
║ 136892 ║ CUENTEME DON SEGUNDO ║ 50.00 ║ 11 ║ 2014-06-27 ║ 
╚════════╩═══════════════════════╩════════╩════╩════════════╝ 

什么需要被改变?

感谢

+0

如果你有更容易明白的问题,更容易向你展示的解决方案的一些样本数据。 – Gidil

+0

你是指样本数据的原始表格吗? –

+0

这个或者接近它的东西可以让我们知道你在处理什么 – Gidil

回答

2

尝试采摘分钟的价格和供应商ID:

SELECT od.IDProducto , 
     p.Nombre AS DescProd , 
     MIN(t.min_price) , 
     MIN(t.idlibreria) , 
     FechaActualizacion 
FROM orderdetails od 
     JOIN (SELECT rpl.idproducto , 
         MIN(precio) AS min_price , 
         rpl.idlibreria AS idlibreria 
       FROM  RelProductoLibrerias rpl 
       GROUP BY rpl.idproducto , 
         rpl.idlibreria 
      ) t ON t.idproducto = Od.IDProducto 
     JOIN Productos p ON (od.IDProducto = p.ID) 
     LEFT JOIN Editoriales e ON (p.IdEditorial = e.Id) 
     LEFT JOIN OrderStatusFollowUp osf ON osf.ID = Od.IDStatusFollowUp 
WHERE IDOrder = 98770 
GROUP BY od.IDProducto, 
      p.Nombre, 
      FechaActualizacion 
+0

这混合idlibreria与minprice ....它确实返回50美元,但它返回idlibreria 2而不是11相当于50美元...这是因为你使用min(idlibreria )...所以这不起作用,谢谢你的帮助,你能否进一步帮助?谢谢! –

+0

唯一的方法是添加第二个或子选择拉动正确的idlibreria。 –

0
SELECT  DISTINCT(od.IDProducto) , p.Nombre as DescProd, 
     t.min_price,t.idlibreria,FechaActualizacion 
from   orderdetails od 
join   (select rpl.idproducto,min(precio) as min_price,rpl.idlibreria as idlibreria 
     from  RelProductoLibrerias rpl 
     group by rpl.idproducto ,rpl.idlibreria 
     ) t 
on   t.idproducto = Od.IDProducto 
JOIN   Productos p ON (od.IDProducto = p.ID) 
LEFT JOIN Editoriales e ON (p.IdEditorial=e.Id) 
LEFT JOIN OrderStatusFollowUp osf on osf.ID = Od.IDStatusFollowUp WHERE IDOrder=98770 
ORDER BY t.min_price 
+0

这将返回全部5个结果 –