SQL 过滤在 where 子句中使用 case

Posted

技术标签:

【中文标题】SQL 过滤在 where 子句中使用 case【英文标题】:SQL Filtering using case when in where clause 【发布时间】:2021-03-11 11:46:51 【问题描述】:

我需要排除下表中的最后一行:

dim11   dim12   amount1
NULL    1   200
NULL    2   300
Y   3   100
N   3   100

我想得到 amount1 的总和,其中 dim12 在 (1,2,3) 中,但只有 dim12 =3 有 dim 11 = 'Y' 而不是 = 'N'。

SELECT
 SUM(AMOUNT1)
FROM table1
WHERE dim12 in (1,2,3)

总结:我想排除所有dim12 = 3和dim11 'Y'

Current Output: 700
Expected Output: 600

我需要在 Where 子句中使用 CASE 吗?提前谢谢你。

【问题讨论】:

【参考方案1】:

其中 dim12 在 (1,2,3) 中,但只有 dim12 =3 具有 dim 11 = 'Y' 而不是 = 'N'。

这听起来像:

where dim12 in (1, 2) or (dim12 = 3 and dim11 = 'Y')

如果您想要一个条件总和 - 比如说因为您还有其他列 - 然后使用:

select sum(case when dim12 in (1, 2) or dim11 = 'Y' then amount end)
from t
where dim12 in (1, 2, 3)

【讨论】:

以上是关于SQL 过滤在 where 子句中使用 case的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL 不同的 where 子句与 case when

访问 SQL 子查询 WHERE 子句不过滤结果 [关闭]

Oracle:在 Where 子句中使用 Case 语句

SQL 在 WHERE IN 子句中使用 CASE 语句

在 where 子句 SQL 中的 case 语句中使用参数

sql不允许在where子句比较中使用case变量[重复]