我需要根据某些条件对表中返回的行进行排序。
例如,表上的简单选择会产生以下结果。你看DisplayDayNumber从1开始,一直持续到7。
我想对数据进行排序,以便DayOfWeekName = Tuesday的行显示在第一行,其余的行在其后排序。
任何帮助重新排序这些行都将受到高度赞赏。
答案 0 :(得分:0)
您可以使用CASE
:
...
ORDER BY
CASE WHEN DayOfWekName = 'Tuesday' THEN 0 ELSE 1 END ASC,
DisplayDayNumber ASC
更新所以你首先想要Tuesday
,但其余的行应该排序"自然",所以接下来的行是Wednesday
, Thirsday
,Friday
等,直到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 强>