先按特定ID排序然后再休息

She*_*kaj 6 t-sql sql-server sql-server-2008

考虑具有两个Column RoleId和User Name的示例表

Role | Name
  1      AB
  3      A
  1      ABC
  2      D
  2      B
  3      Abb
  1      E
  4      TE
Run Code Online (Sandbox Code Playgroud)

如何使用SQL查询获取以下输出.

Role | Name
  3      A
  3      Abb
  1      AB
  1      ABC
  1      E
  2      B
  2      D
  4      TE
Run Code Online (Sandbox Code Playgroud)

我只想先按角色ID 3排序,然后再保留Roleid.目前我正在使用Union来实现这个//

SELECT * FROM (SELECT * From @temp 
         Where roleid=3
UNION ALL
SELECT * From @temp 
         Where roleid != 3
 ) as X 
Run Code Online (Sandbox Code Playgroud)

Jam*_*s Z 14

您可以使用大小写来进行更复杂的排序:

select *
 from @temp
 order by case when Role = 3 then 0 else 1 end, Role, Name
Run Code Online (Sandbox Code Playgroud)


str*_*t01 5

select *
from @temp
order by CASE WHEN Role = 3 THEN 0 ELSE Role END, Name
Run Code Online (Sandbox Code Playgroud)