如何在没有顺序的情况下在顶部显示特定的 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
我有一个国家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