在T-SQL中按条件排序

Sam*_*ung 1 sql t-sql sql-server sql-order-by

我有两个结果列。一个是用户名,另一个是日期时间,可以检查每个用户何时查看帖子。如果用户未看到该帖子,则日期时间值为NULL。

我想订购这样的数据。date-time为null或不为null都是按用户名字母顺序排列的。但应将空数据和非空数据分开。

SELECT u.username AS username,
       MAX(w1.date) AS lastdate
FROM w1
     RIGHT OUTER JOIN user_info u ON w1.userid = u.userid
WHERE u.usergroup = 'student'
GROUP BY username
ORDER BY lastdate,
         username;
Run Code Online (Sandbox Code Playgroud)

当我运行此查询时,当日期时间为NULL时,我得到的结果是用户名按字母顺序排序,但是当日期时间不为null时,按日期时间排序。

希望大家能理解,如果不清楚,请发表评论。

Bar*_*han 5

您可以使用

order by case when lastdate is null then 0 
              else 1 end, username
Run Code Online (Sandbox Code Playgroud)

  • 或更短一点:`由iif排序(lastDate为null,0、1),用户名` (4认同)
  • @ZoharPeled或更短的left(LastDate,0),username在这种情况下,left(...,0)将返回空字符串或空字符串。 (4认同)