对查询SQL中的行重新排序

时间:2014-06-23 14:51:38

标签: sql-server tsql

我需要根据某些条件对表中返回的行进行排序。

例如,表上的简单选择会产生以下结果。你看DisplayDayNumber从1开始,一直持续到7。

Following

我想对数据进行排序,以便DayOfWeekName = Tuesday的行显示在第一行,其余的行在其后排序。

enter image description here

任何帮助重新排序这些行都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

您可以使用CASE

...
ORDER BY 
    CASE WHEN DayOfWekName = 'Tuesday' THEN 0 ELSE 1 END ASC,
    DisplayDayNumber ASC

更新所以你首先想要Tuesday,但其余的行应该排序"自然",所以接下来的行是WednesdayThirsdayFriday等,直到Monday

您可以使用此查询:

declare @weekStart varchar(10) = 'Tuesday'

SELECT d.*
FROM Dates d
ORDER BY 
    CASE WHEN DayOfWeekName = @weekStart 
        THEN 0 
        ELSE 1 
    END ASC,
    CASE WHEN DisplayDayNumber < (SELECT DisplayDayNumber 
                                  FROM Dates 
                                  WHERE DayOfWeekName = @weekStart) 
        THEN 7 + DisplayDayNumber
        ELSE DisplayDayNumber 
    END ASC 

DEMO