проблема при использовании предложения союза с заказом по - PullRequest
1 голос
/ 14 мая 2019

При размещении объединения между двумя утверждениями выдается некоторая ошибка. Код указан ниже:

Я попытался поставить скобки, начиная с оператора select и заканчивая порядком по имени. Но у меня ничего не работает. Может кто-нибудь подсказать, что не так с этим кодом

select TOP(1) name from hack
where len(name) in (select max(len(name)) from hack )
order by name

UNION

select TOP(1) name from hack
where len(name) in (select min(len(name)) from hack )
order by name

Получение ошибки, указанной ниже:

Неверный синтаксис рядом с ключевым словом 'UNION'.

Ответы [ 3 ]

1 голос
/ 14 мая 2019

where не обязательно:

select h.*
from (select top (1) name
       from hack h
       order by len(name), name asc
     ) h
union all
select h.*
from (select top (1) name
       from hack h
       order by len(name) desc, name
     ) h;
0 голосов
/ 16 мая 2019

Доступ к таблице только один раз:

SELECT a.Name
FROM (
    SELECT h.Name
        ,ROW_NUMBER()OVER(ORDER BY LEN(h.Name) DESC, h.Name) AS [rnMax]
        ,ROW_NUMBER()OVER(ORDER BY LEN(h.Name) ASC, h.Name) AS [rnMin]
    FROM hack h
) a
WHERE (a.rnMin = 1 OR a.rnMax = 1)
GROUP BY a.Name
ORDER BY a.Name
;
0 голосов
/ 14 мая 2019

Вам необходимо использовать подзапросы:

select name
from   (
         select TOP(1) name 
         from hack 
         where len(name) in (select max(len(name)) from hack )
         order by name
      ) A

UNION

select name
from   (
         select TOP(1) name 
         from hack 
         where len(name) in (select min(len(name)) from hack )
         order by name
      ) B
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...