2013-06-25 2 views
0

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

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

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

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

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

ответ

0

Изменить этот

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

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

+0

Привет, спасибо за предложение. Я боялся, что это будет ответ. Просто подумав, что это будет много повторений кода, учитывая все, что нужно изменить, это 1 столбец (1 строка кода) – Gravy

+0

@Gravy Обновлен мой ответ. Я сошел с ума :) – fancyPants

+0

OOOH, это выглядит хорошо ... У меня будет игра и отметьте правильный ответ, как только я заработаю. Спасибо за помощь. – Gravy

Смежные вопросы