gpt4 book ai didi

mysql - 存储过程的多重选择

转载 作者:行者123 更新时间:2023-11-29 22:17:47 25 4
gpt4 key购买 nike

我试图从一个表中进行多项选择,但它只显示最后一个选择语句。

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 语句后将分号更改为逗号,但它说语法错误:缺少“分号”。请帮忙。

最佳答案

我看了你的问题,我想我已经解决了。

这里基本上有两个问题,第一个是根据 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。

有关数据透视表的更多信息,您可以阅读 here ,在那里你可以找到一个链接,值得一看,在那里你可以找到很多关于 mysql 查询的内容。

问题的第二部分是获取 Qty_Balance 列。类似问题已解决 here 。这是如何根据上一行的值计算行值。

因此您的完整查询可能如下所示:

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!

关于mysql - 存储过程的多重选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31044728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com