Как показать конкретные 2 строки вверху без порядка, а затем отсортировать остальные по порядку, используя SQL DISTINCT, UNION - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть таблица стран с идентификатором, имя с повторяющимися записями. Я использую DISTINCT и UNION, чтобы показывать названия двух конкретных стран, Ирландия и Англия, вверху и все остальное после имени заказа, как показано ниже в 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 

Пробовал с DISTINCT & UNION в SQL QUERY: но имена не упорядочены после 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 `

также пробовал с ORDER BY CASE:

  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

ОШИБКА: элементы ORDER BY должны появляться в списке выбора, если инструкция содержит оператор UNION, INTERSECT или EXCEPT.

1 Ответ

0 голосов
/ 17 ноября 2018

Абсолютно нет гарантированного порядка возвращаемого результата, если не указан порядок по.Даже если вы найдете запрос, который вернул строки в нужном порядке, при следующем запуске, завтра или на сайте клиента, он не вернет их в том же порядке.Таким образом, вы должны добавить заказ по предложению.Вам необходимо отсортировать некоторые искусственные значения, например:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...