独家分离

时间:2015-10-05 14:21:47

标签: sql select oracle11g

我有一张产品价格表。有两种价格类型:A =报价,B =标准价格。例如:

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

我正在寻找一个返回

的SELECT语句
  • 标准价格(B类),如果此产品没有报价(A类),
  • 每当产品具有A类价格时的报价(A类)(如果维持B类价格,则忽略不计)。

对于上面的示例数据,语句必须返回要约价格= 0.99 =类型A.

3 个答案:

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

答案 1 :(得分:2)

您可以在桌面上加入两个查询并使用coalesce来确定是否有要约:

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

答案 2 :(得分:0)

根据您的示例,可以通过以下方式完成:

选择*    来自产品    其中price_type in(选择min(price_type)    来自product_id)的产品组;