请教使用GROUP BY 如何处理计算得到的值?能不能这样使用?select ROW_NUMBER() OVER(ORDER BY sum(c.H_EVAL) DESC) RID,
sum(c.H_EVAL),
round(sum(c.H_EVAL)/p.P_TOTALNAV*100,2),--这里在GROUP BY里面该如何处理
a.S_I_CODE1,b.S_I_NAME1 
from TSTK_INDUSTRY_SW a ,TSTK_INDUSTRY1_ENUM_SW b,VCRP_HLD c,VCRP_NAV p
where c.I_CODE=a.I_CODE and b.S_I_CODE1=a.S_I_CODE1
and c.P_ID = 323 And c.BEG_DATE <= '2010-01-01' And c.END_DATE >'2010-01-01'
and p.P_ID = 323 And p.BEG_DATE <= '2010-01-01' And p.END_DATE >'2010-01-01'
and a.S_I_CODE1 in(select distinct S_I_CODE1 from TSTK_INDUSTRY_SW) 
group by a.S_I_CODE1,b.S_I_NAME1  --??
order by sum(c.H_EVAL) DESC

解决方案 »

  1.   

    你说的是PARTITION BY?分析函数的分组
      

  2.   

    语句里加了一个值是通过2个表内的值计算所得,round(sum(c.H_EVAL)/p.P_TOTALNAV*100,2)
    现在就提示:不是GROUP BY 表达式去掉这个值以及VCRP_NAV p ,是可以查询出东西的就想知道在GROUP BY里面该如何处理计算所得到的值?
      

  3.   

    字段如果不在SUM等聚合函数参数里的字段,必须包含在group by中,
    如果加在group by 中不合逻辑,你可以使用子查询嵌套
      

  4.   

    round(sum(c.H_EVAL)/p.P_TOTALNAV*100,2),--这里在GROUP BY里面该如何处理
    根据p.P_TOTALNAV的含义 把p.P_TOTALNAV加上MAX(),MIN(),SUM()修饰看看
      

  5.   

    聚合函数sum,count,avg之类的group by中必须含有所有没有被聚合的字段
    group by a.S_I_CODE1,b.S_I_NAME1,p.P_TOTALNAV这样就可以了
    如果你查询的意图不是这样,就要在p.P_TOTALNAV这个字段上处理下