2015-10-05 59 views
1

我有一個產品價格表。有兩種價格類型:A =報價,B =標準價格。例如:獨家分離

product_id | price | price_type 
------------------------------------- 
001   | 0.99 | A 
001   | 1.49 | B 

我在尋找返回

  • 標準價(B型),如果沒有賣出價(A型)提供該產品的SELECT語句,
  • 如果產品具有類型A的價格(如果保持類型B的價格則不予考慮),則要約價格(類型A)。

對於上面的語句,我的例子中數據必須返回招股價= 0.99 = A型

+0

hv你試過什麼嗎?PLZ不要求我們做你的作業。 – Bikku

回答

2

這可以用左手來完成連接。我假設你至少總是有一個產品的標準價格行。

select p1.product_id, 
     coalesce(p2.price, p1.price) as price 
    from product_prices p1 
    left join product_prices p2 
    on p2.product_id = p1.product_id 
    and p2.price_type = 'A' 
where p1.price_type = 'B' 
2

你可以離開了連接兩個查詢在桌子上,用​​3210,以確定是否有要約或不:

SELECT b.product_id, COALESCE(a.price, b.price) 
FROM  (SELECT product_id, price 
      FROM products 
      WHERE price_type = 'B') b 
LEFT JOIN (SELECT product_id, price 
      FROM products 
      WHERE price_type = 'A') a ON a.product_id = b.product_id 
0

根據您的例子,它可以通過完成從產品組中選擇* 產品 其中price_type in(從產品組中選擇min(price_type) by product_id);

+0

這真的只適用於OP發佈的2行。只要您使用更多產品ID添加更多數據,這將不起作用。 – sstan

+0

你說得對。正如我所說,它基於OP的例子。 –