оракул ora-00979 symfony2 доктрина2

Създавам следния DQL:

SELECT partial operador.{id, pmn, neteo},                           
sum(outcollect.montoTotal) as montoOut,
outcollect.periodo as periodo,
outcollect.pagado
FROM RoamingOperadoresBundle:Operador operador
LEFT JOIN operador.operadorHub operadorHub 
LEFT JOIN operador.outcollect outcollect
WHERE operador.ishub = 0
AND operador.neteo = 1                          
AND operador.incluirReportes = 1
AND operador.pmn not in('CHLTM', 'CHLCM')
AND operador.id not in(SELECT op.id 
                       FROM RoamingOperadoresBundle:Operador op
                       LEFT JOIN op.operadorHub opHub
                       LEFT JOIN op.outcollect out
                       WHERE (opHub.desde <= out.periodo and (opHub.hasta >= out.periodo or opHub.hasta is null))
                       )
AND operador.activo = 1
GROUP BY operador.pmn, outcollect.periodo ORDER BY operador.pmn

Което се трансформира в този SQL:

SELECT o0_.id AS ID0, 
o0_.pmn AS PMN1, 
o0_.neteo AS NETEO2, 
sum(o1_.monto_total) AS SCLR3, 
o1_.periodo AS PERIODO4, 
o1_.pagado AS PAGADO5 
FROM operador o0_ 
LEFT JOIN operador_hub o2_ ON o0_.id = o2_.operador_id 
LEFT JOIN outcollect o1_ ON o0_.id = o1_.operador_id 
WHERE o0_.ishub = 0 
AND o0_.neteo = 1 
AND o0_.incluirReportes = 1 
AND o0_.pmn NOT IN ('CHLTM', 'CHLCM') 
AND o0_.id NOT IN (SELECT o3_.id FROM operador o3_ LEFT JOIN operador_hub o4_ ON o3_.id = o4_.operador_id LEFT JOIN outcollect o5_ ON o3_.id = o5_.operador_id WHERE (o4_.desde <= o5_.periodo AND (o4_.hasta >= o5_.periodo OR o4_.hasta IS NULL))) 
AND o0_.activo = 1 
GROUP BY o0_.pmn, o1_.periodo 
ORDER BY o0_.pmn ASC

Което дава следната грешка:

ORA-00979: no es una expresión GROUP BY

Някакви указания как да промените DQL, за да решите този проблем?

Използвам doctrine2, symfony2 и OCI8


person Nico    schedule 12.06.2014    source източник


Отговори (1)


Според документация на Oracle

ORA-00979 не е израз GROUP BY Причина: Клаузата GROUP BY не съдържа всички изрази в клаузата SELECT. Изразите SELECT, които не са включени в групова функция, като AVG, COUNT, MAX, MIN, SUM, STDDEV или VARIANCE, трябва да бъдат изброени в клаузата GROUP BY.

Action: Include in the GROUP BY clause all SELECT expressions that 
  are not group function arguments.

Така че трябва да включите всички изрази/колона в select list към вашия group by. променете group by на вашата SQL заявка на по-долу

group by o0_.pmn, o1_.periodo, o0_.neteo, o1_.pagado, o0_.id

GROUP BY от DQL към

GROUP BY operador.pmn, outcollect.periodo, operador.id, 
operador.neteo, outcollect.pagado
person Rahul    schedule 12.06.2014