不确定标题是否描述得很好,但我的问题基本上是我试图通过日期和产品ID字段将一个表连接到另一个表,以便能够将分配的价格带入那天的那个产品。一个表用于销售历史记录,另一个表是我们拥有的每个产品的列表,以及当天的更新价格。价格表只有3列;产品,日期,价格。每当生成一组新的价格时,我会将新的日期数据添加到价格表的底部,因此ProdID将每天复制多次。
我们的销售历史记录表中没有存储当天销售产品的价格,因此我们必须从Price表中提取该值以及每天的完整价格列表,这是加入的地点ProdID和Date进来了。
到目前为止,到目前为止相当直接的进展......
我的问题来自这样一个事实,即当天更新价格的表格仅在工作日生成,所以我留下了一周中的2天没有日期和价格可以加入到周末销售,所以在价格栏中留下了空白。
为了解决这个问题,我希望联接的逻辑带来“下一个可用价格”。例如。如果在周六或周日进行销售,我想提取周一创建的价格。这是否会涉及某种声明,在该日期之前添加一天直到它可以执行加入?
我在MS Access中执行此操作。
价格表:
+---------+-------+------------+----------+
| ProdID | Price | Date | Weekday |
+---------+-------+------------+----------+
| 9999999 | £50 | 07/06/2016 | Thursday |
| 9999999 | £50 | 08/06/2016 | Friday |
| 9999999 | £45 | 11/06/2016 | Monday |
| 9999991 | £100 | 07/06/2016 | Thursday |
| 9999991 | £100 | 08/06/2016 | Friday |
| 9999991 | £95 | 11/06/2016 | Monday |
+---------+-------+------------+----------+
销售表的预期结果:
+---------+------------+------------+----------+--+
| ProdID | Sell Price | Date | Weekday | |
+---------+------------+------------+----------+--+
| 9999999 | £50 | 08/06/2016 | Friday | |
| 9999999 | £45 | 09/06/2016 | Saturday | |
| 9999999 | £45 | 10/06/2016 | Sunday | |
| 9999999 | £45 | 10/06/2016 | Sunday | |
| 9999991 | £100 | 08/06/2016 | Friday | |
| 9999991 | £100 | 08/06/2016 | Friday | |
| 9999991 | £95 | 10/06/2016 | Sunday | |
+---------+------------+------------+----------+--+
非常感谢。
答案 0 :(得分:2)
我的解决方案不适用于连接,但使用子选择。
我假设您有一个SALES_HISTORY表,如下所示:
SALES_HISTORY
+---------+-------------+----------+
| ProdID | Date | Weekday |
+---------+-------------+----------+
| 9999999 | 07/06/2016 | Thursday |
| 9999999 | 08/06/2016 | Thursday |
| ... | ... | ... |
+---------+-------------+----------+
下面的SQL语句首先选择销售历史记录表的所有列,然后在销售日期或销售日期后的第一个可用日期选择产品的价格。
SELECT ProdID,
Date,
Weekday,
(SELECT Price
FROM PRICE_TABLE P
WHERE P.ProdID = S.ProdID
AND P.Date = (SELECT MIN(P2.Date)
FROM PRICE_TABLE P2
WHERE P2.ProdId = P.ProdID
AND P2.Date >= S.Date))
FROM SALES_HISTORY S;
(请注意,SQL语句已输入编辑器,因此未经测试。)