1
SELECT TOP 1
        hol_id ,
        CONVERT(VARCHAR(12), hol_date, 112)
FROM    holiday
WHERE   hol_id = 5
UNION ALL
SELECT  hol_id ,
        CONVERT(VARCHAR(12), hol_date, 112)
FROM    holiday
WHERE   hol_id <> 5
ORDER BY CONVERT(VARCHAR(12), hol_date, 112) DESC

我懂了

1   20131218
5   20131018
6   20130818
3   20130405
4   20130311
2   20121129

我想看看

5   20131018
1   20131218
6   20130818
3   20130405
4   20130311
2   20121129
4

2 回答 2

0

您应该按实际日期(hol_date)而不是按转换后的 varchar 值排序。

假设hol_id Key column表开始(不确定为什么在这里使用 TOP 1),请尝试以下查询ORDER BY CASE

SELECT  hol_id ,
        CONVERT(VARCHAR(12), hol_date, 112)
FROM    holiday
ORDER BY CASE WHEN hol_id = 5 
              THEN DATEADD(year,100,getdate()) --Assuming 100 years as max
              ELSE hol_date 
         END DESC
于 2013-04-15T16:22:05.143 回答
0

我将计算一个新值以将特定记录移到顶部,如下所示:

order by
      case when hol_id = 5 then 0 else 1 end -- Sort hol_id 5 at the top
    , hol_date desc -- Sort the rest according to date
于 2013-04-15T16:35:19.580 回答