主义查询生成器案例语句抛出意外的语法错误

时间:2018-09-07 15:06:59

标签: sql symfony doctrine dql

我目前对学说不熟悉,最近2个小时我一直在尝试进行选择以获取特定字段的总和,但仅当布尔值为true时才选择,然后为布尔值为false时此字段的总和

我试图让自己的选择像:

sum(case when (f.prevision = 1) then f.total end)
sum(case when (f.prevision = 0) then f.total end)

然后我也让其他人选择并加入,但是这些并不是那么重要。事实是该学说引发了错误:

[Syntax Error] line 0, col 212: Error: Unexpected ')'

然后我尝试通过控制台通过本机SQL进行选择:

SELECT sum(case when prevision = 1 then total end)
from membre_facturation
GROUP BY id_utilisateur

并且没有错误,甚至没有预期的结果。学说和案例陈述有问题吗?

在此先感谢您的帮助。很抱歉,如果缺少某些东西,我不想写太多的代码,这本来是“太多”的

3 个答案:

答案 0 :(得分:0)

此布局适合您吗?

select sum(f.total) 
from f
where f.prevision = 1

答案 1 :(得分:0)

简单地:

SELECT coalesce(sum(m.prevision), 0) as sumOfPrevision
from membre_facturation as m
GROUP BY m.id_utilisateur

在《教义2》中:

$this->createQueryBuilder('m')
     ->select('coalesce(sum(m.prevision = 1), 0) as sumOfPrevision') ## for true
     | OR |
     ->select('coalesce(sum(m.prevision = 0), 0) as sumOfPrevision') ## for false
     ->orderBy('m.id_utilisateur')
     ->getQuery()
     ->getResult();

答案 2 :(得分:0)

好的,我一直在尝试其他离线操作,但是没有看到您的答案。看来,对于查询生成器而言,ELSE语句不是可选的。我这样写查询:

sum(case when (f.prevision = 1) then f.total else 0 end)

它实际上正在工作。我还将检查合并功能。也许它也会起作用。 也许我做错了其他事情,但事实是添加else语句可以为我解决问题。

你知道一个人比另一个人快吗?从我的看到,“ CASE”和“ COALESCE”非常相似。