簡體   English   中英

如何從一個表返回所有行並從另一個表返回值(如果不存在則返回0)?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM