达梦版本:8.1
系统:Windows 10
架构:x64
SELECT CASE
WHEN ("m"."state" = 1) AND ("m"."deadline" < :__now_1) THEN -1
ELSE CAST("m"."state" AS INT)
END AS "state", CAST(COUNT(*) AS INT) AS "count"
FROM "MY_SCHEMA"."MY_TASK" AS "m"
GROUP BY CASE
WHEN ("m"."state" = 1) AND ("m"."deadline" < :__now_1) THEN -1
ELSE CAST("m"."state" AS INT)
END
字段:
state
:INT
deadline
:DATETIME
参数:
:__now_1
:当前时间
SQL语句逻辑:
按state
(状态)字段对数据进行分组统计数量,若state
状态为1且deadline
(截止日期)字段的值小于当前时间的话,state
返回为-1,其他情况返回state
原值
这条SQL语句会产生错误:
第9 行附近出现错误[-4080]:
不是 GROUP BY 表达式
不清楚这个异常信息产生的原因
这条语句是由以下linq翻译的结果
var now = DateTime.Now;
from task in MY_SCHEMA.MY_TASK
group task by task.state == 1 && task.plan_time < now ? -1 : task.state into g
select new
{
state = g.Key,
count = g.Count()
};
可以参考这个FAQ:https://eco.dameng.com/docs/zh-cn/faq/faq-errorcode.html#4080-%E4%B8%8D%E6%98%AF-group-by-%E8%A1%A8%E8%BE%BE%E5%BC%8F