比较两列的值,然后选择较大的值。

22

我需要查询一个表格,并选择其中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,但似乎无法获得正确的语法


结果中的混合列值应该是5和7,对吗? - Yaroslav
6个回答

48

T-SQL中的IF命令用于编程控制,例如:

  • IF x THEN doSQLStatement1 ELSE doSQLStatement2


在SQL语句中,你需要使用CASE命令。

CASE WHEN a > b THEN a ELSE b END

@MatBailie虽然我在寻找比这更复杂的东西,但我认为你因为如此谦虚而值得一加。顺便说一下,你成功获得了十个赞;) - Bjørn-Roger Kringsjå

12

SQL Fiddle 示例无法加载。 - mobill
哎呀!看起来这个样本太旧了,可能已经丢失、删除或者其他什么原因了。 - Yaroslav

3
您可以使用CASE,但如果其中一个值为“null”,则将“null”视为最大值。
为了解决这个问题,您可以使用GREATEST
SELECT GREATEST(column3, column4)
FROM Table1

这并没有提供问题的答案。您可以搜索类似的问题,或者参考页面右侧的相关和链接问题来找到答案。如果您有一个相关但不同的问题,请提出新问题,并包含此问题的链接以帮助提供上下文。请参阅:提问,获取答案,无干扰 - Sᴀᴍ Onᴇᴌᴀ
OP 询问 MS-SQL Server 的 T-SQL 方言,GREATEST 不是一个函数。 - Marc L.

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

如果您正在使用Oracle,您可以直接使用GREATEST函数。 - user1427302
sql-server-2008被打上了标签,但是IIF在其中并不存在。 - MatBailie

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;

你需要从性能和/或可维护性方面来证明这种复杂性的必要性。我怀疑它在两个方面都不是一个好选择。 - Marc L.

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

看起来那段代码存在一些拼写及语法问题。 - Jamie Keeling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接