首页 > 解决方案 > 获取组合 CASE 语句的 MAX

问题描述

我有 4 个 CASE 语句,我想知道如何只显示计算的 MAX。

我尝试将我的 CASE 语句与 COALESCE 函数结合起来。

SELECT
ID,
CASE 
    WHEN tw.displayText IN ('A','B','C') THEN 'A1'
    WHEN tw.displayText IN ('D','E','F') THEN 'A2'
    WHEN tw.displayText IN ('G','H','I') THEN 'A3'
    ELSE NULL
    END AS COL1

如果COL1可以采取所有 3 ( , , )我该怎么做A3IDA1A2A3

ID COL1
1  A1
1  A2
1  A3

ID COL1
1  A3

标签: sqlsql-server

解决方案


虽然你的问题的措辞不清楚,但如果我今天的读心技巧是正确的,我认为这就是你所需要的:

SELECT CASE 
  WHEN tw.displayText IN ('G','H','I') THEN 3 
  WHEN tw.displayText IN ('D','E','F') THEN 2
  WHEN tw.displayText IN ('A','B','C') THEN 1 
  ELSE NULL
END AS COL1

为什么?因为对单个 CASE 表达式求值使得第一个 WHEN(从上到下)求值为 true 是表达式将返回的值。其余的将被忽略。

因此,在此表达式中,如果导致“3”的条件为真,则返回“3”并忽略其他条件。如果“3”不成立,则检查“2”的条件。等等。

现在,如果您打算使用 GROUP BY 并实际获得一个聚合,那么您需要将整个 CASE..END 表达式包装在一个 MAX() 函数中。


推荐阅读