db2 - DB2 如何使用具有多个条件的用例?
问题描述
我有一个 DB2 服务器,我想根据条件选择数据。如果我在 ColumnX、ColumnY 或 ColumnZ 中有值,它应该在和Value
之间搜索它
我的语句是一堆左外连接,但它看起来像这样:TB2.Column1
TB3.Column1
SELECT
CASE
WHEN (TB1.ColumnX || TB1.ColumnY || TB1.ColumnZ) = 'Value'
THEN Statement1
ELSE ' '
END AS MyColumn
FROM
TB1 LEFT OUTER JOIN TB2 ON TB1.JOINCOL = TB2.JOINCOL
LEFT OUTER JOIN TB3 ON TB2.JOINCOL2 = TB3.JOINCOL
WHERE TB1.Column1 between TB2.Column1 and TB3.Column1
但是不行,是不是语法有错误?
解决方案
仅使用一个表达式无法检查多个等式。您可以使用以下语法技巧:
CASE WHEN 'Value' IN (TB1.ColumnX, TB1.ColumnY, TB1.ColumnZ)
THEN Statement1 ELSE ' ' END AS MyColumn
对此的替代方法是对每一列重复完全相等检查:
SELECT
CASE
WHEN TB1.ColumnX = 'Value' OR
TB1.ColumnY = 'Value' OR
TB1.ColumnZ = 'Value'
THEN Statement1
ELSE ' '
END AS MyColumn
FROM
TB1 LEFT OUTER JOIN TB2
ON TB1.JOINCOL = TB2.JOINCOL
LEFT OUTER JOIN TB3
ON TB2.JOINCOL2 = TB3.JOINCOL
WHERE
TB1.Column1 BETWEEN TB2.Column1 AND TB3.Column1;
如果您需要引用子句中的CASE
表达式,那么您有两种选择。WHERE
首先,您可以对当前查询进行子查询,并为CASE
表达式分配别名:
SELECT *
FROM
(
SELECT CASE WHEN ... AS exp
FROM TB1 ...
) t
WHERE exp = ...
或者,您可以避免子查询,而只在子句中重复整个CASE
表达式。WHERE
推荐阅读
- php - 将整个动态页面放入 If 语句的正确方法
- javascript - 如何有条件地使用内置的 Node.js 或带有 ES6 样式导入的浏览器 API 方法?
- python - 如何使用自定义分隔符和键值对解析文本列表
- angular - 如何在 Angular 7 中使用 Chrome 中的 PasswordCredential API
- angular - 将 TemplateRef 推入对象
- python - 如何使用python从文本文件中提取特定数据及其值
- python - Discord.py - SyntaxError f-string:不允许空表达式
- django - 来自 Views.Py 的数据未显示在模板上
- php - 如何在mysql或php中将动态数据行显示到数据列?
- python - 如何转换 Pandas DF 以显示原始 DF 中的令牌数?