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

时间:2012-10-24 20:42:16

标签: sql sql-server-2008

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

6 个答案:

答案 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的

Here you have complete sample

答案 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