使用动态选择mysql存储过程的列

使用动态选择mysql存储过程的列,mysql,stored-procedures,query-parameters,Mysql,Stored Procedures,Query Parameters,我试图编写一个存储过程,从数据库中提取一些聚合统计数据 我想修改程序,允许动态选择列 我的第一个想法是使用Case或IF语句来选择不同的列 DELIMITER// CREATE PROCEDURE 'procStats'(IN buySell varchar(4)) SELECT CASE WHEN buySell = 'Buy' THEN AVG(salesTransactions.BuyPrice) AS AveragePrice, WHEN b

我试图编写一个存储过程,从数据库中提取一些聚合统计数据

我想修改程序,允许动态选择列

我的第一个想法是使用Case或IF语句来选择不同的列

DELIMITER//
CREATE PROCEDURE 'procStats'(IN buySell varchar(4))
SELECT 

    CASE 
        WHEN buySell = 'Buy' THEN AVG(salesTransactions.BuyPrice) AS AveragePrice,
        WHEN buySell = 'Sell' THEN AVG(salesTransactions.SellPrice) AS AveragePrice,
    END CASE;

    MONTHNAME(salesTransactions.DateOfTransaction) as TransactionMonth
FROM
    salesTransactions
GROUP BY 
    TransactionMonth
LIMIT 6;
END//
现在我不认为案例陈述是为了这个目的,它目前不起作用。。。是否有可能实现上述目标

仅供参考-我完全知道我可以选择这两列,但我不希望将这两列公开给我的web应用。

更改此设置

CASE 
    WHEN buySell = 'Buy' THEN AVG(salesTransactions.BuyPrice) AS AveragePrice,
    WHEN buySell = 'Sell' THEN AVG(salesTransactions.SellPrice) AS AveragePrice,
END CASE;

最后应该是这样的:

DELIMITER//
CREATE PROCEDURE procStats (IN buySell varchar(4))
BEGIN
SELECT 

    CASE buySell
        WHEN 'Buy' THEN AVG(salesTransactions.BuyPrice) 
        WHEN 'Sell' THEN AVG(salesTransactions.SellPrice)
    END AS AveragePrice,

    MONTHNAME(salesTransactions.DateOfTransaction) as TransactionMonth
FROM
    salesTransactions
GROUP BY 
    TransactionMonth
LIMIT 6;
END//

我修正了一些语法错误。

您好,谢谢您的建议。我担心这就是答案。考虑到所有需要更改的只有一列(一行代码)哦,这看起来很好。。。我将有一个游戏,并标记正确的答案,一旦我得到它的工作。谢谢你的帮助。@Gravy还有什么问题吗?请随便问。
DELIMITER//
CREATE PROCEDURE procStats (IN buySell varchar(4))
BEGIN
SELECT 

    CASE buySell
        WHEN 'Buy' THEN AVG(salesTransactions.BuyPrice) 
        WHEN 'Sell' THEN AVG(salesTransactions.SellPrice)
    END AS AveragePrice,

    MONTHNAME(salesTransactions.DateOfTransaction) as TransactionMonth
FROM
    salesTransactions
GROUP BY 
    TransactionMonth
LIMIT 6;
END//