Использование динамического выбора столбцов хранимой процедуры 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//
Я исправил еще несколько синтаксических ошибок.