如何在没有顺序的情况下在顶部显示特定的 2 行,然后使用 SQL DISTINCT, UNION 按顺序对其余行进行排序

How to show specific 2 rows at the top without order and then sort the rest by order using SQL DISTINCT, UNION

我有一个国家table,Id、Name 有重复的记录。我正在使用 DISTINCT 和 UNION 在顶部显示特定的 2 个国家/地区名称爱尔兰和英格兰,然后在 SQL 服务器

create table country (id int , name varchar(50));                      
insert into country (id, name) values( 1, 'Kuwait');                
insert into country (id, name) values( 2, 'Australia');             
insert into country (id, name) values( 3, 'Canada');
insert into country (id, name) values( 4, 'spain');
insert into country (id, name) values( 5, 'Turkey'); 
insert into country (id, name) values( 6, 'Ireland');
insert into country (id, name) values( 7, 'England');
insert into country (id, name) values( 1, 'Kuwait');                
insert into country (id, name) values( 2, 'Australia');             
insert into country (id, name) values( 3, 'Canada');
insert into country (id, name) values( 4, 'spain');
insert into country (id, name) values( 5, 'Turkey'); 
insert into country (id, name) values( 6, 'Ireland');
insert into country (id, name) values( 7, 'England');
DESIRED OUTPUT:
id    name 
-----------
  6   Ireland
  7   England
  2   Australia
  3   Canada
  1   Kuwait
  4   Spain
  5   Turkey 

尝试在 SQL 中使用 DISTINCT 和 UNION QUERY:but 名称在第 3 行后未排序

 select distinct id,name from country where id in (6,7)
 union
 select distinct id,name from country where id not  in (6,7)

 id   name 
-----------
  6   Ireland
  7   England
  1   Kuwait
  2   Australia
  3   Canada
  4   Spain
  5   Turkey `

还尝试了按案例排序:

  select distinct id,name from country where id in (6,7)
  union
  select distinct id,name from country where id not  in (6,7)
  ORDER BY CASE 
  WHEN id = 6 and id = 7  -- whatever identifies that row
  THEN 1 ELSE 2 END

错误:如果语句包含 UNION、INTERSECT 或 EXCEPT 运算符,则 ORDER BY 项目必须出现在 select 列表中。

绝对不能保证 returned 结果的顺序,除非指定排序依据。即使您找到一个查询,return 在下一个 运行 明天或在客户站点上按所需顺序编辑行,它也不会按相同顺序 return 它们。因此,您必须 添加一个 order by 子句。您需要对一些人工值进行排序,例如:

declare  @country table(id int , name varchar(50));                      
insert into @country (id, name) values( 1, 'Kuwait');                
insert into @country (id, name) values( 2, 'Australia');             
insert into @country (id, name) values( 3, 'Canada');
insert into @country (id, name) values( 4, 'spain');
insert into @country (id, name) values( 5, 'Turkey'); 
insert into @country (id, name) values( 6, 'Ireland');
insert into @country (id, name) values( 7, 'England');
insert into @country (id, name) values( 1, 'Kuwait');                
insert into @country (id, name) values( 2, 'Australia');             
insert into @country (id, name) values( 3, 'Canada');
insert into @country (id, name) values( 4, 'spain');
insert into @country (id, name) values( 5, 'Turkey'); 
insert into @country (id, name) values( 6, 'Ireland');
insert into @country (id, name) values( 7, 'England');

select id, name from (
select distinct id, name
from @country) t
order by case name when 'Ireland' then 'aaaaaaaaaaaaaaaaaaaaaaaa1' when 'England' then 'aaaaaaaaaaaaaaaaaaaaaaaa2' else name end