更新时间:2021-12-11 03:20:09
只要使用足够的括号,就可以使用AND
和OR
进行此操作.
You can do this with AND
and OR
as long as you use sufficient parentheses.
我还假设activities.OrderBy
可以为null.如果不是这种情况,则可以删除null检查:
Also I'm assuming that activities.OrderBy
can be null. If that's not the case you can remove the null check:
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
或者,如果您仍然想使用CASE
,则只需使用END
关闭CASE
语句,如下所示:
Alternatively, if you still want to use CASE
, you just need to close your CASE
statement using END
, like this:
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