【问题标题】:Compare values of two columns then select the larger value比较两列的值,然后选择较大的值
【发布时间】:2012-10-24 20:42:15
【问题描述】:

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

【问题讨论】:

  • 结果上的列混合值应该是 5 和 7 正确吗?

标签: sql sql-server-2008


【解决方案1】:

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

  • IF x THEN doSQLStatement1 ELSE doSQLStatement2


在 SQL 语句中,您需要 CASE

CASE WHEN a > b THEN a ELSE b END

【讨论】:

  • @MatBailie 尽管我一直在寻找比这更复杂的东西,但我认为你应该因为如此谦虚而获得 +1。哦,顺便说一句,你确实获得了 10 张赞成票;)
【解决方案2】:

试试这个代码:

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

【讨论】:

  • SQL Fiddle 示例未加载。
  • 呜呜!!似乎样本太旧了,要么丢失,要么被删除
【解决方案3】:

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

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

SELECT GREATEST(column3, column4)
FROM Table1

【讨论】:

【解决方案4】:

我将从创建一个视图开始。

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】:

只是为了不返回 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 函数。
  • IIF 不存在 sql-server-2008,这就是问题的标记。
【解决方案6】:
select column1, coloumn2, case when column3 < column4 then column4 else coloum3 end from table. 

【讨论】:

  • 看起来您在该 sn-p 中存在一些拼写/语法问题。
猜你喜欢
  • 2021-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多