我正在尝试按其状态对订单条目进行排序,但是在我的数据库中没有状态列,我正在尝试使用数据库中其他列的当前值即时生成它。
我在查询中使用CASE语句创建了一个“临时”列。我现在要做的是只获取与CASE列的值匹配的表行。
以下是我到目前为止所做的一个例子:
CASE WHEN date_due = 0 AND date_sent = 0 THEN "opened" WHEN date_sent > 0 AND (CURRENT_DATE - date_due) <= 0 THEN "sent" END AS status
我的问题是,当我尝试过滤它时,status
现在显然是一个未知的列:
... WHERE status = "sent" ...
在我的案例中,最好的解决方案是什么?是否可以定义包含状态的临时变量?
答案 0 :(得分:0)
where
。因此,在评估where
时,不存在status
列。您必须将case
语句放在where
子句中:
where
CASE
WHEN date_due = 0 AND date_sent = 0 THEN "opened"
WHEN date_sent > 0 AND (CURRENT_DATE - date_due) <= 0 THEN "sent"
END = 'sent'
但更实际的是,你会想要这样做:
where
date_sent > 0
and (CURRENT_DATE - date_due) <= 0
可以使用别名列名的唯一子句是order by
子句(跨数据库 - 某些数据库,如MySQL,允许您在group by
中使用它们。)
答案 1 :(得分:0)
在MySql中,这可行
select
...
CASE
WHEN date_due = 0 AND date_sent = 0 THEN "opened"
WHEN date_sent > 0 AND (CURRENT_DATE - date_due) <= 0 THEN "sent"
END AS status
...
from table
where
... (other conditions) ...
**HAVING status = "sent"**
如果您不需要包含其他条件,请移除WHERE
,只留下SELECT ... FROM ... HAVING ...