Doctrine查询Builder case语句会抛出意外的语法错误

问题描述 投票:1回答:3

我现在已经退出了新的学说,我一直在尝试在最后2个小时做一个选择来得到一个特定字段的总和,但只有当一个布尔值为真,然后,另一个选择这个总和布尔值为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

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

在此先感谢您的帮助。抱歉,如果遗漏了一些东西,我不想写太多的代码,这本来就是“太多”

sql symfony doctrine dql
3个回答
0
投票

而不是案例,这种布局是否适合您?

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

0
投票

只是:

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

在Doctrine2中:

$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();

0
投票

好吧,我一直在尝试离线,然后没有看到你的答案。并且看起来在查询构建器的情况下,ELSE语句不是可选的。我写了我的查询:

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

它确实在起作用。我还将检查合并功能。也许它也会奏效。或者也许我做了别的错事,但问题是添加else语句为我排序。

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

© www.soinside.com 2019 - 2024. All rights reserved.