Использование динамического выбора столбцов хранимой процедуры MySQL

Я пытаюсь написать хранимую процедуру, чтобы получить некоторые статистические данные из базы данных.

Я хотел бы изменить процедуру, чтобы позволить динамический выбор столбцов.

Моими первыми мыслями было использование оператора 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//

Теперь я не думаю, что заявления о случаях предназначены для этой цели, и в настоящее время это не работает... Возможно ли достичь вышеуказанного??

К вашему сведению - я полностью осознаю, что могу просто выбрать оба столбца, однако я не хочу показывать оба столбца в своем веб-приложении.

1 ответ

Решение

Изменить это

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

в

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

В конце это должно выглядеть так:

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//

Я исправил еще несколько синтаксических ошибок.

Другие вопросы по тегам