Bạn có thể làm điều này với AND
và OR
miễn là bạn sử dụng đủ dấu ngoặc đơn.
Ngoài ra, tôi giả định rằng activities.OrderBy
có thể là null. Nếu không đúng như vậy, bạn có thể bỏ kiểm tra null:
SELECT activities.*,
activitytypes.orderby
FROM activities
LEFT OUTER JOIN activitytypes
ON activities.typeid = activitytypes.typeid
WHERE activities.userid = 86
AND activities.typeid NOT IN ( 5, 10, 11, 12, 19 )
AND ( ( activities.orderby = 1
AND activities.starttime >= '2013-08-26 04:00:00'
AND activities.endtime <= '2013-08-27 04:00:00' )
OR ( ( activities.orderby IS NULL
OR activities.orderby != 1 )
AND activities.activitydate = '2013-08-26' ) )
ORDER BY activitytypes.orderby,
activities.starttime
Ngoài ra, nếu bạn vẫn muốn sử dụng CASE
, bạn chỉ cần đóng CASE
của mình câu lệnh sử dụng END
, như thế này:
SELECT activities.*,
activitytypes.orderby
FROM activities
LEFT OUTER JOIN activitytypes
ON activities.typeid = activitytypes.typeid
WHERE activities.userid = 86
AND activities.typeid NOT IN ( 5, 10, 11, 12, 19 )
AND (
CASE
WHEN activities.orderby = 1 THEN
activities.starttime >= '2013-08-26 04:00:00' AND activities.endtime <= '2013-08-27 04:00:00'
ELSE
activities.activitydate = '2013-08-26'
END
)
ORDER BY activitytypes.orderby,
activities.starttime