2013-06-25 1 views
0

데이터베이스에서 일부 집계 통계를 제거하는 저장 프로 시저를 작성하려고합니다.사용 mysql 저장 프로 시저의 동적으로 선택하는 열

열의 동적 선택을 허용하는 절차를 수정하고 싶습니다.

내 첫번째 생각은 케이스를 사용했다거나 문이 다른 열

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

관련 문제