簡體   English   中英

在T-SQL中按條件排序

[英]Order by condition in T-SQL

我有兩個結果列。 一個是用戶名,另一個是日期時間,可以檢查每個用戶何時查看帖子。 如果用戶未看到該帖子,則日期時間值為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;

當我運行此查詢時,當日期時間為NULL時,我得到的結果是用戶名按字母順序排序,但是當日期時間不為null時,按日期時間排序。

希望大家能理解,如果不清楚,請發表評論。

您可以使用

order by case when lastdate is null then 0 
              else 1 end, username

我建議使用left join聯接並將查詢的短語設置為:

SELECT u.username AS username,
       MAX(w1.date) AS lastdate
FROM user_info u LEFT JOIN
     w1
     ON w1.userid = u.userid
WHERE u.usergroup = 'student'
GROUP BY u.username
ORDER BY (CASE WHEN w1.date IS NULL THEN 1 ELSE 0 END),
         u.username;

SELECT DISTINCT幾乎不適合GROUP BY

我還建議限定查詢多個表的查詢中的所有列引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM