我需要查询一个表并选择4列的3个值。我需要比较第3列和第4列的值,然后选择更大的值。
例如:
column1 column2 column3 column4
hello hello 3 5
hi hi 7 1
我需要回复:
column1 column2 Hybrid
hello hello 5
hi hi 7
我一直在尝试使用IF / ELSE,但我似乎无法使语法正确
答案 0 :(得分:43)
在T-SQL中, IF 命令用于编程控制。例如:
IF x THEN doSQLStatement1 ELSE doSQLStatement2
在SQL语句中,您需要 CASE 。
CASE WHEN a > b THEN a ELSE b END
答案 1 :(得分:8)
试试这段代码:
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的
答案 2 :(得分:3)
您可以使用CASE,但如果其中一个值为' null',则' null'被认为是最大的价值。
要解决此问题,您可以使用GREATEST
SELECT GREATEST(column3, column4)
FROM Table1
答案 3 :(得分:0)
select column1, coloumn2, case when column3 < column4 then column4 else coloum3 end from table.
答案 4 :(得分:0)
我首先要创建一个视图。
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;
答案 5 :(得分:0)
因此我们不会返回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