Ответ 1
В T-SQL команда IF предназначена для программного управления. Например:
-
IF x THEN doSQLStatement1 ELSE doSQLStatement2
В инструкции SQL вам нужен CASE.
CASE WHEN a > b THEN a ELSE b END
Мне нужно запросить таблицу и выбрать 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, но я просто не могу заставить синтаксис правильно
В T-SQL команда IF предназначена для программного управления. Например:
IF x THEN doSQLStatement1 ELSE doSQLStatement2
В инструкции SQL вам нужен CASE.
CASE WHEN a > b THEN a ELSE b END
Попробуйте этот код:
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.
Вы можете использовать CASE, но если одно из значений "null", "null" считается наибольшим значением.
Чтобы решить эту проблему, вы можете использовать GREATEST
SELECT GREATEST(column3, column4)
FROM Table1
select column1, coloumn2, case when column3 < column4 then column4 else coloum3 end from table.
Я бы начал с создания представления.
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;
Просто мы не возвращаем 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