两张桌子,三张价格,不同时期,我该怎么办?

时间:2014-03-08 09:15:49

标签: sql stored-procedures sql-server-2008-r2 reporting

我已经尝试过并且未能解决这个难题,现在我正在寻找一些很好的帮助,如果有人在那里。说明:

第一张表格包含商品的原始价格。

Table1 (Sales_Data): 
+---------+----------+-------+------------+
| Item_Id | Store_Id | Price | Sales_Date |
+---------+----------+-------+------------+

第二个表包含两个价格

  • 一个是商店在商品上有另一个价格,并且在To_Date中有一个0值 因为这个价格应该永远持续下去。(让我们称之为永远的价格)
  • 一个是如果一个商店在一个项目上有另一个价格只有一段时间(02.03.2014-10.03.2014)我们可以打电话给这个折扣
  • 两种价格都存储在价格中,但日期差别很大。

    Table2 (Discount_Data): 
    +---------+----------+-------+------------+
    | Item_Id | Store_Id | Price | Sales_Date |
    +---------+----------+-------+------------+
    

现在到了大问:

  1. 永远价格应始终覆盖原价
  2. 折扣价格应始终覆盖确切期间的原始/或永久价格
  3. Item_Id和Store_Id必须相同。
  4. 我怎样才能解决这个问题?在途中有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

我讨厌做出一个假设,但看起来你的第二个表应该包含两个列,From_Date和To_Date。我会将Discount_Data永久别名为ddf,而Discount_Data期间价格为ddp

select sd.Item_Id, 
    sd.Store_Id, 
    sd.Price as OriginalPrice, 
    coalesce(ddd.Price,ddf.Price,sd.Price) as UpdatedPrice
from Sales_Data sd
left join Discount_Data ddf
  on sd.Item_Id=ddf.Item_Id
    and sd.Store_Id=ddf.Store_Id
    and sd.Sales_Date >= ddf.From_Date
    and ddf.To_Date=0
left join Discount_Data ddp
  on sd.Item_Id=ddp.Item_Id
    and sd.Store_Id=ddp.Store_Id
    and sd.Sales_Date between ddp.From_Date and ddp.To_Date

希望有所帮助。