簡體   English   中英

在存儲過程中選擇多項

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

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