Sql-Server

基於列中的 NULL 值的條件 ORDER BY

  • September 5, 2019

我有一張這樣的桌子。表(student_name nvarchar(20) 不為 NULL,等級 int)。當我寫

select * from table
order by grades asc

它表明了這一點

student_name | grades
---------------------
  Ann       |  NULL
  Bob       |  NULL
  Bob       |   10
  Jane      |   25
  Nelly     |   30

什麼時候select * from table order by grades desc

  student_name | grades
   ---------------------
     Nelly     |   30
     Jane      |   25
     Bob       |   10
     Ann       |  NULL
     Bob       |  NULL

但我需要像這樣訂購。最後是NULL,但那些有等級的人按升序排列,比如

  student_name | grades
   ---------------------
     Bob       |   10
     Jane      |   25
     Nelly     |   30
     Ann       |  NULL
     Bob       |  NULL

怎麼可能這樣做一個有條件的訂單?如何指定 NULL 值在最後?

您可以在檢查訂單時添加一個案例,以賦予 NULL 較低的優先級,然後過濾等級

SELECT * 
FROM table 
ORDER BY CASE WHEN grades IS NULL 
THEN 2 ELSE 1 END ASC, grades ASC;

由於您使用的是整數,因此您也可以這樣做,這應該會更高效

SELECT * 
FROM table
ORDER BY -grades DESC;

來源

DB<>小提琴

引用自:https://dba.stackexchange.com/questions/231900