日期:2014-05-17  浏览次数:20911 次

求关于分组汇总查询问题
有三个表
a :riskcode,riskname 险种代码,险种名称
b : managecom,prem,riskcode 机构代码,保费,险种代码
c : comcode,name 机构代码,机构名称
其中机构代码为8位(机构分为总公司,分公司,子公司)
分公司代码占前面4位
如: XX分公司代码为86010000
  其子公司为86010001,86010002等
我现在想统计各个险种中各个分公司的保费总额
分公司保费总额 = 分公司保费 + 其所有子公司的保费
我写如下SQL 语句但是结果有很多重复数据
SQL code

SELECT 
 a.riskcode 险种代码,
 a.riskname 险种名称,
 substr(b.managecom,1,4) 机构代码,
 c.name 机构名称
 SUM(b.prem) over(partition by a.riskcode, substr(b.managecom,1,4)) 保费
 FROM a a, b b, c c
 WHERE a.riskcode = b.riskcode
 AND b.managecom = c.comcode 




正确的写法应该怎样?
麻烦大家帮忙一下,谢谢!

------解决方案--------------------
加个distinct可以吗?
------解决方案--------------------
SELECT A.riskcode,A.riskname,c.comcode,c.NAME,
sum(b.prem)
FROM A,b,c
WHERE c.comcode LIKE '%0000'
AND b.managecom LIKE substr(c.comcode,1,4)||'%'
AND b.riskcode=A.riskcode
GROUP BY A.riskcode, A.riskname, c.comcode, c.NAME
------解决方案--------------------
SQL code
--不需要用分析函数吧,这个
SELECT d.riskcode 险种代码, d.riskname 险种名称, c.comcode 机构代码, c.name 机构名称 d.prem 保费
  FROM c,
       (SELECT a.riskcode, a.riskname, substr(b.managecom, 1, 4) managecom, SUM(b.prem) prem
          FROM a, b
         WHERE a.riskcode = b.riskcode AND
         GROUP BY a.riskcode, a.riskname, substr(b.managecom, 1, 4)) d,
 WHERE d.managecom || '0000' = c.comcode;

------解决方案--------------------
楼主,你是哪个保险公司的?我也是做这行的。呵呵!