如何在where where条件下使用case语句?

时间:2017-08-03 08:50:05

标签: sql oracle

我需要在WHERE子句中使用CASE语句,如:

WHERE  p.resource_qry_seq = b.resource_qry_seq
AND    p.resource_id = b.resource_id
AND    (CASE
         WHEN b.flexible_time IS NULL THEN
          ((b.activity_start >= p.activity_start AND b.activity_end < p.activity_end) OR
          (b.activity_start > p.activity_start  AND b.activity_end <= p.activity_end))
         ELSE
               b.activity_start > p.late_start
         END)

我得到了,&#39;错过了右括号&#39;如何根据列中的值包含这些条件?

1 个答案:

答案 0 :(得分:2)

CASE表达式的谓词(即THEN之后的内容)必须是值,而不是逻辑。您可以按如下方式重新定义WHERE子句:

WHERE
    p.resource_qry_seq = b.resource_qry_seq AND
    p.resource_id = b.resource_id AND
    ((b.flexible_time IS NULL AND
        (b.activity_start >= p.activity_start AND b.activity_end < p.activity_end) OR
        (b.activity_start > p.activity_start  AND b.activity_end <= p.activity_end)) OR
    (b.flexible_time IS NOT NULL AND b.activity_start > p.late_start))
相关问题