Salah satu cara Anda dapat melakukannya adalah dengan mendefinisikan alias kolom pada tingkat yang berbeda sehingga Anda dapat mereferensikannya dua kali tanpa mengulangi ekspresi.
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)
Saya akan mempertimbangkan untuk menggunakan SQL dinamis untuk ini. Tangkap semua kueri semacam ini akan mematikan gagasan untuk mendapatkan rencana bagus yang dapat menggunakan indeks untuk menghindari pengurutan.