我正在尝试以下查询,并且在计数(CASE WHEN r.status = 2 THEN 1 ELSE 0 END)部分时出现问题。
我真的需要记录他们等于"完成"的状态计数。我尝试了以下但我不断得到:预期的Doctrine \ ORM \ Query \ Lexer:T_FROM,得到了'。'
有人可以帮忙吗?
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
'SELECT count(r.rpId) AS referralCount, count(CASE WHEN r.status=2 THEN 1 ELSE 0 END) as referralCompleted, p.firstName, p.lastName, p.npi, u.username
FROM MainReferralCaptureBundle:Referral r, MainReferralCaptureBundle:Physician p, MainUserBundle:User u
WHERE r.valid = 1
AND r.rpId = p.id
AND r.submittedBy = u.id
AND r.createdDate BETWEEN :startdate AND :enddate
GROUP BY p.id')
->setParameter('startdate', $form->get('startdate')->getData())
->setParameter('enddate', $form->get('enddate')->getData());
答案 0 :(得分:1)
您没有按照SELECT
声明中的所有非汇总字段进行分组。这不会导致某些rdbms出现错误,但确实会造成结果垃圾。
此外:
count(CASE WHEN r.status=2 THEN 1 ELSE 0 END)
将计算ELSE 0
的所有记录。完全删除ELSE
,只有在满足条件时才会计算。同样,您可以将ELSE 0
更改为ELSE NULL
。聚合中不包括NULL
。您也可以将COUNT()
更改为SUM()
。
我从查询本身就注意到了这一点,不确定你得到的错误是什么。