2015-06-04 6 views
-2
 id1 id2 name 
1  1 2 a 
2  3 4 b 
3  5 6 c 
4  7 8 d 
5  9 10 e 

select id1, id2, name 
from Emp3 
where id2 in (select MAX(id2) from Emp3) 

Как распечатать только максимальное число?Как выбрать максимальное значение двух одинаковых столбцов в одной таблице?

+2

Максимум чего? Покажите нам ожидаемый результат! (Например, что случилось с вашим текущим запросом)? – jarlh

+0

Из вашего предыдущего запроса это приведет к пятой строке таблицы. Это то, что вам нужно? –

+0

Из вышеприведенного запроса мне нужно только максимальное значение, т. Е. Из приведенных выше значений мне нужно только 10 для печати на моем экране вывода –

ответ

0

USE

select id2 
from Emp3 
where id2 in (select MAX(id2) from Emp3) 

Это будет печатать только 10

если вы хотите максимум среди этих 2 колонки затем использовать

SELECT 
    CASE 
     WHEN MAX(id1) >= MAX(id2) THEN MAX(id1) 
     WHEN MAX(id2) >= MAX(id1) THEN MAX(id2) 
    END AS MaxValue 
FROM Emp3 
0

Если оба столбца идентификаторов индексируются, использование производной таблицы с 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) 
0

Используйте TOP и ORDER BY, чтобы получить результат

SELECT TOP 1 ID2 FROM Emp3 ORDER BY ID2 DESC 
0
select max(id) from (
    select max(id1) as id from Emp3 
    union 
    select max(id2) as id from Emp3 
) 
+0

Спасибо друзьям –

0
DECLARE @T TABLE (ID1 INT ,ID2 INT ,NAME VARCHAR(80)) 
INSERT INTO @T VALUES (1,2,'NME1') 
INSERT INTO @T VALUES (3,4,'NME2') 
INSERT INTO @T VALUES (5,6,'NME3') 
INSERT INTO @T VALUES (7,8,'NME4') 
INSERT INTO @T VALUES (9,10,'NME5') 
INSERT INTO @T VALUES (11,12,'NME6') 
SELECT * FROM @T 

SELECT MAX(ID1) ID FROM 
(
SELECT ID1 FROM @T T1 
UNION 
SELECT ID2 FROM @T T2 
)TT 
Смежные вопросы