Если оба столбца идентификаторов индексируются, использование производной таблицы с UNION ALL
:
select max(id)
from
(
select max(id1) as id from Emp3
union all
select max(id2) from Emp3
)
Если они не индексируются, используйте CASE
:
select max(case when id1 > id2 then id1
when id2 > id1 then id2
else coalesce(id1,id2) end)
from Emp3
Этот ответ использует COALESCE
для обработки NULLs
(если таковые имеются ...) таблица будет читаться только один раз. (С решением UNION таблица будет прочитана дважды, и вы не хотите, чтобы сделать это без какого-либо индекса!)
Старых ответов:
Я предполагаю, что вы хотите строку с наибольшим id1/id2 значение?
Возвращает строку, если нет другой строки с более высоким значением идентификатора не существует:
select id1, id2, name
from Emp3 e1
where not exists (select 1 from Emp3 e2
where e2.id1 > e1.id1
or e2.id1 > e1.id2
or e2.id2 > e1.id1
or e2.id2 > e1.id2)
Вернется как строки, если есть связь. (Два или более строк с таким же высоким значением.)
Альтернативное решение, использовать TOP
, в сочетании с ORDER BY
с CASE
, чтобы найти друг на строки большее значение ID:
select TOP 1 id1, id2, name
from Emp3
order by case when id1 > id2 then id1 else id2 end desc
Альтернатива 3, суб-запрос с UNION ALL
найти наибольшее ID:
select TOP 1 id1, id2, name
from Emp3
where (select max(case when id1 > id2 then id1 else id2 end) from Emp3) in (id1,id2)
Максимум чего? Покажите нам ожидаемый результат! (Например, что случилось с вашим текущим запросом)? – jarlh
Из вашего предыдущего запроса это приведет к пятой строке таблицы. Это то, что вам нужно? –
Из вышеприведенного запроса мне нужно только максимальное значение, т. Е. Из приведенных выше значений мне нужно только 10 для печати на моем экране вывода –