2014-12-03 65 views
0

實施例的存儲過程:案例條件在MySQL存儲過程

DELIMITER // 
CREATE PROCEDURE GetOfficeByCountry(IN yr_order tinyint(1)) 
BEGIN 
SELECT * 
FROM offices 
WHERE country LIKE 'A'; 
ORDER BY 
CASE yr_order 
     WHEN 1 THEN updated 
     WHEN 2 THEN likes 
     ELSE 1 END 
ASC 
END // 
DELIMITER ; 

yr_order是一個存儲過程參數。當ASC條件後,把該查詢是罰款:

CASE yr_order 
     WHEN 1 THEN updated 
     WHEN 2 THEN likes 
     ELSE 1 END 
    ASC 

我可以把不同的排序順序是這樣每個條件:

CASE yr_order 
     WHEN 1 THEN updated ASC 
     WHEN 2 THEN likes ASC 
     WHEN 3 THEN updated DESC 
     WHEN 4 THEN likes DESC 
     ELSE 1 END 

我收到與語法錯誤。有沒有什麼辦法可以針對每種情況使用不同的排序?

+1

http://stackoverflow.com/questions/15621609/t-sql-conditional-order-by – Codeek 2014-12-03 11:34:39

回答

1

,你不行,但你可以這樣做:

CASE yr_order 
     WHEN 1 THEN updated 
     WHEN 2 THEN likes 
     WHEN 3 THEN -updated 
     WHEN 4 THEN -likes 
     ELSE 1 END 
ASC 

假設更新和喜歡的數字。如果他們不是,你可以做這樣的事情:

ORDER BY 

    CASE yr_order 
      WHEN 1 THEN updated 
      WHEN 2 THEN likes 
      ELSE 1 END 
    ASC, 
    CASE yr_order 

      WHEN 3 THEN updated 
      WHEN 4 THEN likes 
      ELSE 1 END 
    DESC