如何返回所有行从一个表中返回值,如果不存在返回0?
我在我的数据库中的两个表:与每个项目的当前价格每小时采购物料如何返回所有行从一个表中返回值,如果不存在返回0?
Item | Qnt | Rate |Total
Meat | 1 | 20 | 20
Fish | 0.5 | 30 | 15
Chicken|1 | 25 | 25
Meat | 2 | 20 | 40
Table2: Trading Price
Item | Datetime | Price
Meat | 2013-02-20 10:00:00 | 20
Meat | 2013-02-20 09:00:00 | 18
Meat | 2013-02-19 08:00:00 | 21
Fish | 2013-02-19 09:00:00 | 15
Fish | 2013-02-19 08:00:00 | 17
Chicken|2013-02-20 09:00:00|26
Chicken|2013-02-20 08:00:00|25
的表1列出了购买的物品和表2更新:
表1。所以从表2可以清楚地看出,肉类最后一次交易的时间是2013年2月20日上午10点。鱼类没有在当天交易,它于19-02-2013上午9点交易,鸡肉交易于2013年2月20日上午9点。我想做的事情,列出从表1中的所有项目,并加入从表2的各个项目的最后交易价格将喜欢这样的内容:
Output:
Item | Qty | Total | Last Trade Price
Meat | 1 | 20 | 20
Meat | 2 | 40 | 20
Fish | 0.5 |15 | 15
Chicken|1 |25 |26
什么类型的连接,哪些条款应在此应用,以获得理想的输出? 我试过这个查询: SELECT p.Item,p.Qnt l.price FROM Table1 as p INNER JOIN Table2 as l ON p.Item = l.Item WHERE l.Datetime =(SELECT max(Datetime)FROM Table2) ; 但通过这个查询,我没有找到所需的结果,因为每个项目的最大日期时间不相同,这就是项目从输出中缺失的原因。
那么在WHERE子句中应该应用什么联接类型和条件来获得上述输出?
尝试此查询:
SELECT p.Item, p.Qnt, LatestPriceTable.price FROM Table1 as p
INNER JOIN
(SELECT Table2.Item, Table2.Price FROM Table2 INNER JOIN
(SELECT Item, MAX(DateTime) FROM Table2
GROUP BY Item) AS A ON Table2.Item = A.Item) AS LatestPriceTable
ON p.Item=LatestPriceTable.Item
内最查询SELECT Item, MAX(DateTime) FROM Table2 GROUP BY Item
将输出中的是最新的DateTime
每个Item
。我们将这个结果称为A.现在我们将A和Table2结合起来得到最新日期的Price
列值。生成的表名为LatestPriceTable,将只包含项目名称和最新价格。现在,您可以简单地将它与Table1一起进行计算。
我的确有一种感觉,你设计的系统可能不够好,无法达到你想要实现的目标。它是一种库存类型的应用程序吗?我看到的问题是,您总是将当前库存量与最新市场价格相乘。实际上,股票几乎总是包含不同日子和不同利率的购买。但是再次,我不确定你的确切目的,所以也许你可以接受你在做什么。
请您详细解释一下上面的代码吗? – stockBoi 2013-03-04 18:00:50
@ user2132726:看看我上面的修改。 – dotNET 2013-03-05 03:49:08
实际数据是一个股票市场价格表,但显示更简单的例子,我用肉,鱼等。虽然我试图用我的实际代码完成上述查询,但它不是我想要的。任何方式,感谢您的帮助。你能告诉我一个查询代码在哪里,我将设置最新的时间是这样的:SELECT p.Item,p.Qnt l.price FROM TABLE1 as p INNER JOIN Table2 as l ON p.Item = l.Item WHERE l。 Datetime ='2013-02-20 10:00:00'。如果与l.Datetime匹配,结果输出将显示ltp,否则将显示ltp = 0;怎么做? – stockBoi 2013-03-05 11:24:02