2014-09-25 5 views
6

मेरे पहले प्रश्न यहाँ Case statement for Order By clause with Desc/Asc sort से इसे जारी रखते हुए मैं इस तरह एक बयान है:मामला वक्तव्य एकाधिक स्तंभ और वर्णन/ए एस सी के साथ खण्ड द्वारा क्रमबद्ध करें

SELECT 
    * 
FROM 
    TableName 
WHERE 
ORDER BY 
    CASE @OrderByColumn WHEN 1 THEN Forename END DESC, 
    CASE @OrderByColumnWHEN 2 THEN Surname END ASC 

यह अच्छी तरह से काम करता है, लेकिन कभी कभी मैं स्तंभ से अधिक की आवश्यकता द्वारा क्रम में

..... 
ORDER BY 
    CASE @OrderByColumn WHEN 1 THEN Forename, Date, Location END DESC 

मैं बाहर काम नहीं कर सकता कैसे CASE बयान THEN भाग में एकाधिक स्तंभों की अनुमति देते हैं बनाने के लिए: मैं वास्तव में कुछ इस तरह की जरूरत है।

उत्तर

8

क्या आपको इसकी आवश्यकता है?

ORDER BY 
    CASE @OrderByColumn WHEN 1 THEN Forename END DESC, Date, Location, 
    CASE @OrderByColumn WHEN 2 THEN Surname END ASC 
6

आप कई मामलों को लिख सकते हैं, भले ही उनके पास एक ही स्थिति हो।

ORDER BY 
    CASE @OrderByColumn WHEN 1 THEN Forename END DESC, 
    CASE @OrderByColumn WHEN 1 THEN Date END DESC, 
    CASE @OrderByColumn WHEN 1 THEN Location END DESC, 
    CASE @OrderByColumn WHEN 2 THEN Surname END ASC 

वास्तव में, आप सॉर्ट करने के लिए एक कॉलम निर्दिष्ट नहीं करते हैं, लेकिन एक अभिव्यक्ति।

मामले बयान अशक्त लौटाता है यदि शर्त पूरी नहीं है, इसलिए वास्तव में यह मतलब है:

CASE @OrderByColumn WHEN 1 THEN Forename ELSE NULL END 

तो अगर @OrderByColumn नहीं 1 तो बयान रिटर्न हमेशा शून्य है। यह इसे क्रमबद्ध करने से अलग नहीं करता है, लेकिन यह परिणामस्वरूप उन सभी पंक्तियों को एक साथ रखता है, जिससे पंक्तियों के उस समूह के साथ 'सुरनाम' निर्णायक क्रमबद्ध होता है।

संबंधित मुद्दे