Сравните значения двух столбцов, затем выберите большее значение

Мне нужно запросить таблицу и выбрать 3 значения из 4 столбцов. Мне нужно сравнить значения 3-го столбца и четвертого столбца и выбрать большее значение.

Например:

column1  column2  column3  column4
 hello    hello      3        5   
 hi       hi         7        1   

Мне нужно вернуться:

column1  column2  Hybrid
 hello    hello     5   
 hi       hi        7   

Я пытаюсь использовать IF/ELSE, но я просто не могу заставить синтаксис правильно

Ответ 1

В T-SQL команда IF предназначена для программного управления. Например:

  • IF x THEN doSQLStatement1 ELSE doSQLStatement2


В инструкции SQL вам нужен CASE.

CASE WHEN a > b THEN a ELSE b END

Ответ 2

Попробуйте этот код:

SELECT column1, column2,
       (CASE WHEN column3 > column4 THEN column3 ELSE column4 END)
  FROM Table1

Результат:

COLUMN1   COLUMN2  Hybrid
 hello     hello      5
  hi         hi       7

Здесь у вас есть полная выборка на SQL Fiddle.

Ответ 3

Вы можете использовать CASE, но если одно из значений "null", "null" считается наибольшим значением.

Чтобы решить эту проблему, вы можете использовать GREATEST

SELECT GREATEST(column3, column4)
FROM Table1

Ответ 4

select column1, coloumn2, case when column3 < column4 then column4 else coloum3 end from table. 

Ответ 5

Я бы начал с создания представления.

CREATE VIEW t_c
SELECT id, c1 AS c FROM t
UNION
SELECT id, c2 AS c FROM t;

Тогда я бы выбрал именно эту точку зрения.

SELECT id, MAX(c) FROM t_c GROUP BY id;

Ответ 6

Просто мы не возвращаем null:

SELECT  IIF( a > b, a, COALESCE( a, b )) -- coalesce or isnull
FROM wherever

Вот запрос на его проверку:

with whatever as (
  select null as a, 1 as b
  UNION
  select 1 as a, null as b
  union
  select 1 as a, 0 as b
  union
  select 0 as a, 1 as b
  union
  select null as a, null as b
)
select( iif( a > b, a, isnull( b, a )))
from whatever

Должен вернуться

null
1
1
1
1