我需要在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;如何根据列中的值包含这些条件?
答案 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))