具有多个值的 CASE 语句

Posted

技术标签:

【中文标题】具有多个值的 CASE 语句【英文标题】:CASE Statements with multiple values 【发布时间】:2018-10-19 17:12:27 【问题描述】:

您好,我想写一个这样的案例陈述:

CASE
WHEN A in ('AA','AV') and B = 'HH' then 'R'

我收到此错误:

错误 [42803] [IBM][DB2/LINUXX8664] 在 SELECT 子句、HAVING 子句或 ORDER BY 子句中指定的以“B”开头的表达式未在 GROUP BY 子句中指定,或者它在 SELECT 子句中、HAVING 子句或带有列函数且未指定 GROUP BY 子句的 ORDER BY 子句。

但我的选择子句中没有“B”。

【问题讨论】:

请分享你提交的sql 这是一个 9 页的 SQL,我不能分享整个代码。但是当我做 CASE WHEN A = 'AA' and B = 'HH' then 'R' WHEN A = 'AV' and B= 'HH' then 'R' 时,它工作正常。 错误不是来自这个sn-p。你能分享整个查询吗? 是的,你知道。 B = 'HH'. “我的选择子句中没有“B”是什么意思?就在这里and B = 'HH'。该错误引用了 CASE 语句中的 B 列。 【参考方案1】:

CASE 语句是 SELECT、ORDER BY 或 HAVING 子句的一部分。

对于此错误,结合此代码,您还必须有一个 GROUP BY 子句。您需要包含 B 作为该 group by 子句的一部分。否则,B 代表整个范围的可能值,其中一些可能满足也可能不满足 = 'HH' 条件;代码不明确。

【讨论】:

感谢您帮助我理解错误。我也必须在底部的“分组依据”语句中进行这些我没有做过的更改,我收到了这个错误。【参考方案2】:

你需要END然后值

select CASE
WHEN A in ('AA','AV') and B = 'HH' then 'R' end

CASE 的一般语法

CASE expression
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
   ...
    WHEN conditionN THEN resultN
    ELSE result
END 

【讨论】:

您的答案是正确的,但对我来说没有帮助。我很感激你试图提供帮助。干杯!

以上是关于具有多个值的 CASE 语句的主要内容,如果未能解决你的问题,请参考以下文章

在每个'when'块中具有多个值的Case语句

SQL - 使用具有多个 IS NULL、IS NOT NULL 的 CASE 语句

oracle sql - 选择具有多个“case when”的语句并检查是不是包含文本

SQL CASE THEN 语句,其中 ID 具有多个值

SQL语句中Case 的用法

SQL Server 更新语句基于具有多个值的 Select 语句