2013-06-25 59 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// 

現在我不認爲case語句用於這一目的,它目前不工作.. 。是否有可能實現上述?

僅供參考 - 我完全知道,我可以只選擇兩列,但我不希望公開兩列到我的web應用程序。

回答

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