[英]How to return all rows From one table and return value from another table, if not present return 0?
我的數據庫中有兩個表:
表1:采購物品
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列出了每小時購買的商品,而Table2則以每個商品的當前價格每小時更新一次。 因此,從表2中可以清楚地看到,肉類的最后交易時間是2013年2月20日上午10點,而魚不是在同一天進行交易,魚的交易時間是2013年2月19日上午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 FROM Table2的max(Datetime)); 但是通過此查詢,我找不到期望的結果,因為每個項目的最大日期時間都不相同,這就是為什么輸出中缺少項目。
那么在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
將輸出每個Item
最新DateTime
。 我們將此結果稱為A。現在,我們將A與Table2結合起來,以獲取最近日期的Price
列值。 結果表稱為LatestPriceTable,將僅包含商品名稱和最新價格。 現在,您可以簡單地將它與Table1結合起來進行計算。
我確實感覺到您設計的系統可能無法滿足您想要實現的目標。 它是庫存類型的應用程序嗎? 我看到的問題是,您總是將當前的庫存數量乘以最新的市場價格。 實際上,庫存幾乎總是包含在不同日期和不同利率下進行的購買。
但是話又說回來,我不確定您的確切目的,所以也許您可以繼續自己的工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.