这段HQL到底哪里出了问题!很急!

sHql = " select aa.contrId, max(aa.contrSum) as contrSum, aa.expenseCategory, SUM(aa.planSum) as planSumTotal,";
sHql += " SUM(aa.planReqstSumTotal) as reqstSumTotal ";
sHql += " from (select a.id as planId, a.contrId,b.contrSum,a.expenseCategory,a.planSum,a.createTime,";
sHql += " (select SUM(c.reqstSum) from VFundRequest c where c.bussinessId = a.id) as planReqstSumTotal";
sHql += " from TechnicalCostPlan a inner join a.contract as b ) aa";
sHql += " where aa.contrId = ? and aa.createTime between ? and ?";
sHql += " group by aa.contrId,aa.expenseCategory";

严重: Servlet.service() for servlet [application] in context with path [/lsmis] threw exception [Request processing failed; nested exception is org.springframework.orm.hibernate3.HibernateQueryException: unexpected token: ( near line 1, column 153 [ select aa.contrId, max(aa.contrSum) as contrSum, aa.expenseCategory, SUM(aa.planSum) as planSumTotal, SUM(aa.planReqstSumTotal) as reqstSumTotal from (select a.id as planId, a.contrId,b.contrSum,a.expenseCategory,a.planSum,a.createTime, (select SUM(c.reqstSum) from com.landsea.domain.finance.VFundRequest c where c.bussinessId = a.id) as planReqstSumTotal from com.landsea.domain.marketing.TechnicalCostPlan a inner join a.contract as b ) aa where aa.contrId = ? and aa.createTime between ? and ? group by aa.contrId,aa.expenseCategory]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ( near line 1, column 153 [ select aa.contrId, max(aa.contrSum) as contrSum, aa.expenseCategory, SUM(aa.planSum) as planSumTotal, SUM(aa.planReqstSumTotal) as reqstSumTotal from (select a.id as planId, a.contrId,b.contrSum,a.expenseCategory,a.planSum,a.createTime, (select SUM(c.reqstSum) from com.landsea.domain.finance.VFundRequest c where c.bussinessId = a.id) as planReqstSumTotal from com.landsea.domain.marketing.TechnicalCostPlan a inner join a.contract as b ) aa where aa.contrId = ? and aa.createTime between ? and ? group by aa.contrId,aa.expenseCategory]] with root cause
org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ( near line 1, column 153 [ select aa.contrId, max(aa.contrSum) as contrSum, aa.expenseCategory, SUM(aa.planSum) as planSumTotal, SUM(aa.planReqstSumTotal) as reqstSumTotal from (select a.id as planId, a.contrId,b.contrSum,a.expenseCategory,a.planSum,a.createTime, (select SUM(c.reqstSum) from com.landsea.domain.finance.VFundRequest c where c.bussinessId = a.id) as planReqstSumTotal from com.landsea.domain.marketing.TechnicalCostPlan a inner join a.contract as b ) aa where aa.contrId = ? and aa.createTime between ? and ? group by aa.contrId,aa.expenseCategory]
at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)
at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47)
at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:82)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:284)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:182)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:101)
at org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:80)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1651)
at org.springframework.orm.hibernate3.HibernateTemplate$30.doInHibernate(HibernateTemplate.java:923)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:921)
at com.quickdevelop.service.impl.BaseServiceImpl.find(BaseServiceImpl.java:318)
at com.landsea.service.impl.marketing.MarketServiceImpl.showTechStatistical(MarketServiceImpl.java:2109)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at com.sun.proxy.$Proxy27.showTechStatistical(Unknown Source)
at com.landsea.controller.marketing.MarketController.showTechStatistical(MarketController.java:717)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.servlet.mvc.multiaction.MultiActionController.invokeNamedMethod(MultiActionController.java:473)
at org.springframework.web.servlet.mvc.multiaction.MultiActionController.handleRequestInternal(MultiActionController.java:410)
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:662)

这是报错信息