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

Sql 比较两列的值,然后选择较大的值,sql,sql-server-2008,Sql,Sql Server 2008,我需要查询一个表并从4列的值中选择3列。我需要比较第三列和第四列的值,然后选择较大的值 例如: column1 column2 column3 column4 hello hello 3 5 hi hi 7 1 我需要返回: column1 column2 Hybrid hello hello 5 hi hi 7 我一直在尝试使用IF/EL

我需要查询一个表并从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中获得正确的语法,命令用于编程控制。例如:

  • 如果是x,则doSQLStatement1其他doSQLStatement2

在SQL语句中,您需要

CASE WHEN a > b THEN a ELSE b END
选择column1,column2,当column3
尝试以下代码:

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上。

我首先创建一个视图

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”,则“null”被视为最大值

要解决这个问题,您可以使用


这样我们就不会返回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

结果中的列混合值应该是5和7正确吗?看起来您在该代码段中有一些拼写/语法问题。@MatBailie尽管我在寻找比这更复杂的内容,但我认为您如此谦逊,应该得到+1。哦,顺便说一句,你确实获得了10张选票;)SQL Fiddle示例未加载.Ufff!!似乎样品太旧了,要么丢失了,要么被删除了,这并不能回答这个问题。您可以,也可以参考页面右侧的相关和链接问题来找到答案。如果您有一个相关但不同的问题,并包含指向此问题的链接以帮助提供上下文。请参阅:OP询问MS-SQL Server的T-SQL方言
Best
不是一个函数。如果您使用Oracle,您可以使用Best函数。
IIF
不适用于
sql-server-2008
,这就是问题所在。您必须从性能和/或可维护性方面证明这一复杂性。我怀疑这两方面都是输家。
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