先按特定 ID 排序,然后再按其余顺序

问题描述 投票:0回答:4

考虑一个包含两列 RoleId 和用户名的示例表

Role | Name
  1      AB
  3      A
  1      ABC
  2      D
  2      B
  3      Abb
  1      E
  4      TE

我如何使用 SQL 查询来获取以下输出。

Role | Name
  3      A
  3      Abb
  1      AB
  1      ABC
  1      E
  2      B
  2      D
  4      TE

我只想先按角色 ID 3 订购,然后再按剩余角色 ID 订购。 目前我正在使用 Union 来实现 //

SELECT * FROM (SELECT * From @temp 
         Where roleid=3
UNION ALL
SELECT * From @temp 
         Where roleid != 3
 ) as X 
sql-server sql-server-2008 t-sql
4个回答
18
投票

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

select *
 from @temp
 order by case when Role = 3 then 0 else 1 end, Role, Name

4
投票
select *
from @temp
order by CASE WHEN Role = 3 THEN 0 ELSE Role END, Name

4
投票

我通常使用 NULLIF,但 case 可能会更快?

SELECT   *
FROM     @temp
ORDER BY NULLIF(Role,3), Name

0
投票

table
中选择*,按FIELD(名称,'A')DESC,名称

排序
© www.soinside.com 2019 - 2024. All rights reserved.