连接几个表的SQL最低价格

时间:2014-07-03 20:26:14

标签: sql-server join minimum

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

这是查询:

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 ║
╚════════╩═══════════════════════╩════════╩════╩════════════╝

需要改变什么?

由于

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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