sql-serversortingsql-order-byrow-numberover-clause

Order by multiple columns in SQL Server


I have a table in SQL Server in which I need to select the data, sorted based on a value. For example,

Can anyone tell me how can I achieve this in SQL without using if else as below:

IF @SortOrder = 1
THEN
    SELECT * 
    FROM table 
    ORDER BY c1, c2, c3
END

IF @SortOrder = 2
THEN
    SELECT * 
    FROM table 
    ORDER BY c2, c1, c3
END

IF @SortOrder = 3
THEN
    SELECT * 
    FROM table 
    ORDER BY c3, c1, c2
END

Solution

  • You can use CASE EXPRESSION for conditional ordering:

    SELECT * FROM Table
    ORDER BY CASE WHEN @SortOrder = 1 then c1
                  WHEN @SortOrder = 2 then c2
                  ELSE c3
             END,
             CASE WHEN @SortOrder = 1 then c2
                  ELSE  c1
             END,
             CASE WHEN @SortOrder in(1,2) then c3
                  ELSE c2
             END