我有兩個表在我的數據庫main_item_stock和stock_history如何在SELECT子句中使用子查詢?
我想創建一個報告表明,有多少股票,缺貨和浪費在main_item_stock每一個項目,每一個動作該用戶做會插入一條記錄進入stock_history。
main_item_stock
-----------------------------------------------
stkitm_id stkitm_code stkitm_name stkitm_qty
-----------------------------------------------
1 S001 Apple 10.000
2 S002 Orange 5.000
-----------------------------------------------
stock_history
-------------------------------------------------------------------------------------
stkhis_id sktitm_id stkitm_code stkitm_name stkhis_type stkhis_qty created_date
1 1 S001 Apple Wastage 1.000 2017/03/13
2 2 S002 Orange Stock Out 0.500 2017/03/12
3 2 S002 Orange Stock In 0.100 2017/03/13
-------------------------------------------------------------------------------------
結果,我想: -
----------------------------------------------------------------------------------------------
stkitm_code stkitm_name created_date item_onhand item_stockin item_stockout item_wastage
----------------------------------------------------------------------------------------------
S001 Apple 2017/03/13 9.000 0 0 1
S002 Orange 2017/03/12 4.500 0 0.500 0
S002 Orange 2017/03/13 4.600 0.100 0 0
*item_onhand = main_item_stock.stkitm_qty
我曾嘗試下面的查詢,但stockin,缺貨,浪費總是返回相同的值
query = "SELECT main_item_stock.stkitm_code,main_item_stock.stkitm_name,main_item_stock.stkitm_qty,
(SELECT SUM(stkhis_qty) FROM stock_history WHERE stkhis_type = 'Stock Out'"
If dtp_from.Checked Then
query &= " AND DATE(stock_history.created_date) >= '" & Format(CDate(dtp_from.Text), "yyyy-MM-dd") & "'
AND DATE(stock_history.created_date) <= '" & Format(CDate(dtp_to.Text), "yyyy-MM-dd") & "'"
End If
query &= ") AS 'item_stockout',
(SELECT SUM(stkhis_qty) FROM stock_history WHERE stkhis_type = 'Wastage'"
If dtp_from.Checked Then
query &= " AND DATE(stock_history.created_date) >= '" & Format(CDate(dtp_from.Text), "yyyy-MM-dd") & "'
AND DATE(stock_history.created_date) <= '" & Format(CDate(dtp_to.Text), "yyyy-MM-dd") & "'"
End If
query &= ") AS 'item_wastage',
(SELECT SUM(stkhis_qty) FROM stock_history WHERE stkhis_type = 'Stock In'"
If dtp_from.Checked Then
query &= " AND DATE(stock_history.created_date) >= '" & Format(CDate(dtp_from.Text), "yyyy-MM-dd") & "'
AND DATE(stock_history.created_date) <= '" & Format(CDate(dtp_to.Text), "yyyy-MM-dd") & "'"
End If
query &= ") AS 'item_stockin'
FROM main_item_stock
LEFT JOIN stock_history
ON main_item_stock.stkitm_id = stock_history.stkitm_id"
query &= " GROUP BY stock_history.stkitm_id"
如何更改查詢,並得到我想要的結果?
UPDATE:
我曾嘗試另一個查詢,這次返回的數據是正確的,但我可以用這個表來創造我想要的報告?
SELECT SUM(stkhis_qty),stkitm_name,stkhis_type,DATE(created_date)
FROM stock_history
WHERE DATE(created_date) >= '2017/03/12'
GROUP BY stkitm_code,stkhis_type,DATE(created_date)
結果: -
我怎樣才能改變此搜索表鏡像2?該報告需要有所有這些列
UPDATE:
這是main_item_stock
這是stock_history
結果應該看起來像下面的圖片,無論是類型也可以。
*圖片上的最後一個記錄日期是錯誤的應該是2017年3月17日
是的,爲什麼你不能?如果您在查詢數據後使用reportviewer,請將該數據放入數據表中,並將其與reportviewer控件一起使用。 – codeMonger123
@ codeMonger123我知道我可以使用DataTable創建一個報表,但我不知道如何將StockOut,StockIn,Wastage更改爲第 – vbnewbie
列是否希望報表按item_id或歷史ID排序?那麼'stkhis_id'或'sktitm_id'(首先是所有的蘋果,然後是所有的橘子,否則)?取決於此,可能有非常不同的方法。 – Solarflare