2012-10-24 53 views
13

我需要查询表,并选择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

'IF/ELSE'在这里不起作用。 – Kermit

+0

列结果上的混合值应该是5和7是否正确? – Yaroslav

回答

34

在T-SQL中IF命令是用于程序化的控制。例如:

  • IF x THEN doSQLStatement1 ELSE doSQLStatement2


在一个SQL语句,你需要CASE

CASE WHEN a > b THEN a ELSE b END 
+1

我预计10个upvotes这个答案。 – Kermit

+1

@njk - 哈! :) 我对此表示怀疑...虽然我不介意;) – MatBailie

+0

@MatBailie尽管我在寻找一些比这更复杂的东西,但我认为你应该得到一个+1这么谦虚。哦,顺便说一句,你确实设法得到十张赞成票;) –

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

看起来你在这个片段中有一些拼写/语法问题。 –

6

试试这个代码:

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

结果:

COLUMN1 COLUMN2 Hybrid 
hello  hello  5 
    hi   hi  7 

Here you have complete sample在SQL提琴。

+0

SQL小提琴示例不加载。 – mobill

+0

Ufff !!似乎这个样本太旧了,或者丢失了,删除了或者其他任何东西 – Yaroslav

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; 
2

您可以使用CASE,但如果其中一个值是“空”,则“空”被认为是最大的价值。

为了解决这个问题,你可以使用GREATEST

SELECT GREATEST(column3, column4) 
FROM Table1 
+0

这并不能回答这个问题。您可以[搜索类似的问题](https://stackoverflow.com/search),或参考页面右侧的相关和链接问题来查找答案。如果你有一个相关但不同的问题,请[提出一个新问题](https://stackoverflow.com/questions/ask),并包含一个链接以帮助提供上下文。请参阅:[提问,获得答案,不要分心](https://stackoverflow.com/tour) –

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 
+0

如果您使用的是Oracle,您可以使用GREATEST函数。 – user1427302

+0

“sql-server-2008”不存在'IIF',这是问题的标记。 – MatBailie