DB2如何在多个条件下使用案例?

时间:2019-06-24 07:56:29

标签: db2

我有一个DB2服务器,我想根据条件选择数据。 如果我在ColumnX,ColumnY或ColumnZ中有值Value,则应在TB2.Column1TB3.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

但是它不起作用,语法有错误吗?

1 个答案:

答案 0 :(得分:0)

仅使用一个表达式就不可能检查多个相等性。您可以使用以下语法技巧:

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表达式。