2017-08-03 24 views
0

我需要使用CASE语句的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) 

我越来越“缺少右括号”如何根据一列中的值包括这样的条件?

回答

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))