[英]multiple select on stored procedure
我正在嘗試從一個表中進行多個選擇,但它僅顯示最后一個選擇語句。
CREATE PROCEDURE `usp_GetStockCard` (IN Matecode varchar(10))
BEGIN
(select tran_date as tran_date
from TM_matbalance
where Mate_code=Matecode);
(select Mate_code as Mate_code
from TM_matbalance
where Mate_code=Matecode);
(select tran_qtyx as Qty_in
from TM_matbalance
where tran_type='IN'
and mate_code=matecode);
(select tran_qtyx as Qty_out
from TM_matbalance
where tran_type='OUT'
and mate_code=matecode);
END
我試圖在每個select語句后將分號更改為逗號,但它表示語法錯誤:缺少“分號”。 請幫忙。
您將需要將查詢結構化為一個,或將參數傳遞給存儲過程以選擇所需的輸出/查詢,以重新構造查詢,您將需要類似以下內容:
`CREATE PROCEDURE `usp_GetStockCard` (IN Matecode varchar(10))
BEGIN
(select tran_date as tran_date, Mate_code as Mate_code, tran_qtyx as Qty
from TM_matbalance
where Mate_code=Matecode
and (tran_type='IN' or tran_type='OUT');
END`
或者,如果您有ID列,請嘗試以下操作:
SELECT coalesce(ta.id, tb.id) as tran_id, coalesce(ta.tran_date, tb.tran_date) as tran_date, coalesce(ta.Mate_code, tb.Mate_code) as Mate_code, ta.tran_type as Qty_In, tb.tran_type as Qty_Out
from (select ta.*
from TM_matbalance ta
where ta.tran_type = 'IN'
and Mate_code=Matecode
) ta full outer join
(select tb.*
from TM_matbalance tb
where tb.tran_type = 'OUT'
and Mate_code=Matecode
) tb
on ta.id = tb.id ;
如果您不需要返回ID列,則只需將ID替換為ID列的名稱,然后刪除coalesce(ta.id, tb.id) as tran_id
我看着你的問題,我想我解決了。
基本上,這里有兩個問題,第一個是根據Tran_Type列中的值(IN或OUT)將您的Tran_Qtyx列變為Qty_In和Qty_Out的表進行旋轉...使用此查詢解決的那部分問題
SELECT Tran_Date, Mate_Code,
SUM(CASE WHEN Tran_Type = 'IN' THEN Tran_Qtyx ELSE 0 END) Qty_In,
SUM(CASE WHEN Tran_Type = 'OUT' THEN Tran_Qtyx ELSE 0 END) Qty_Out
FROM myTable
WHERE Mate_Code = 'MAT001'
GROUP BY DATE(Tran_Date)
注意:在您想要的結果中,我只會看到“ MAT001”作為Mate_Code,因此在此解決方案中我堅持使用它,並將MAT002從結果中排除。
有關數據透視表的更多信息,您可以在這里閱讀, 在這里您可以找到一個鏈接,該鏈接很好看,在這里您可以找到很多有關mysql查詢的內容。
問題的第二部分是獲取Qty_Balance列。 這里也解決了類似的問題。 這是基於上一行中的值計算行值的方法。
因此,您的完整查詢可能如下所示:
SELECT t1.Tran_Date, t1.Mate_Code, t1.Qty_In, t1.Qty_Out,
@b := @b + t1.Qty_In - t1.Qty_Out AS Qty_Balance
FROM
(SELECT @b := 0) AS dummy
CROSS JOIN
(SELECT Tran_Date, Mate_Code,
SUM(CASE WHEN Tran_Type = 'IN' THEN Tran_Qtyx ELSE 0 END) Qty_In,
SUM(CASE WHEN Tran_Type = 'OUT' THEN Tran_Qtyx ELSE 0 END) Qty_Out
FROM myTable
WHERE Mate_Code = 'MAT001'
GROUP BY DATE(Tran_Date)) AS t1
ORDER BY t1.Tran_Date;
注意:可能只認為您應該在此處更改表名稱,並且應該可以使用。
這是SQL Fiddle,因此您可以了解它的工作原理!
GL!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.