ऐसा करने का एक तरीका यह होगा कि आप कॉलम उपनाम को एक अलग स्तर पर परिभाषित करें ताकि आप अभिव्यक्ति को दोहराए बिना इसे दो बार संदर्भित कर सकें।
SELECT *,
Row_number() OVER (ORDER BY
CASE WHEN @SortBy LIKE '% ASC' THEN sort_col END ASC,
CASE WHEN @SortBy LIKE '% DESC' THEN sort_col END DESC) AS RowNumber
FROM YourTable
CROSS APPLY (SELECT CASE
WHEN @SortBy LIKE 'column1 %' THEN Cast(column1 AS SQL_VARIANT)
WHEN @SortBy LIKE 'column2 %' THEN Cast(column2 AS SQL_VARIANT)
WHEN @SortBy LIKE 'column3 %' THEN Cast(column3 AS SQL_VARIANT)
WHEN @SortBy LIKE 'column4 %' THEN Cast(column4 AS SQL_VARIANT)
END) C(sort_col)
मैं इसके बजाय इसके लिए गतिशील एसक्यूएल का उपयोग करने पर विचार करता हूं। इस तरह की कैच ऑल क्वेरी एक अच्छी योजना प्राप्त करने के विचार को मार देगी जो एक प्रकार से बचने के लिए इंडेक्स का उपयोग कर सकती है।