有三个表
a :riskcode,riskname 险种代码,险种名称
b : managecom,prem,riskcode 机构代码,保费,险种代码
c : comcode,name 机构代码,机构名称
其中机构代码为8位(机构分为总公司,分公司,子公司)
分公司代码占前面4位
如: XX分公司代码为86010000
其子公司为86010001,86010002等
我现在想统计各个险种中各个分公司的保费总额
分公司保费总额 = 分公司保费 + 其所有子公司的保费
我写如下SQL 语句但是结果有很多重复数据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 正确的写法应该怎样?
麻烦大家帮忙一下,谢谢!
a :riskcode,riskname 险种代码,险种名称
b : managecom,prem,riskcode 机构代码,保费,险种代码
c : comcode,name 机构代码,机构名称
其中机构代码为8位(机构分为总公司,分公司,子公司)
分公司代码占前面4位
如: XX分公司代码为86010000
其子公司为86010001,86010002等
我现在想统计各个险种中各个分公司的保费总额
分公司保费总额 = 分公司保费 + 其所有子公司的保费
我写如下SQL 语句但是结果有很多重复数据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 正确的写法应该怎样?
麻烦大家帮忙一下,谢谢!
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
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;
我想要的结果是既能把分公司和其子公司加起来,又能够只按分公司名称分组显示
我的源码如下:SELECT
b.riskcode 险种代码,
b.riskname 险种名称,
substr(a.managecom,1,4) 分公司代码,
--(SELECT t.name FROM ldcom t WHERE t.comcode LIKE substr(a.managecom,1,4) || '%') 分公司名称,
SUM(
CASE
WHEN (d.payyears >= 10 AND d.payintv <> '0') THEN
a.SumActuPayMoney*1
WHEN (d.payyears < 10 AND d.payintv <> '0') THEN
a.SumActuPayMoney*(d.payyears/10)
WHEN (d.payintv = '0') THEN
a.SumActuPayMoney*0.1
END
) 总保费
FROM ljapayperson a, lmrisk b, ldcom c, lcpol d
WHERE a.riskcode = b.riskcode
AND a.managecom = c.comcode
AND a.polno = d.polno
AND a.managecom LIKE substr(a.managecom,1,4)|| '%'
AND d.appflag <> '0'
AND d.salechnl in ('1','3') --销售渠道
AND a.paytype = 'ZC' --正常交费
--AND a.paytypeflag = '1' --续期 其它则不是
AND a.confdate BETWEEN date'2009-01-01' AND date'2009-03-31' --生效日期
GROUP BY b.riskcode, b.riskname,substr(a.managecom,1,4)
如上源码的结果是只能按照分公司代码分组,但是分公司名称无法显示,我打算使用上面有注释的子查询来显示分公司名称,但是使用后无法分组.
外面在加一层就可以
--标准折标,包含新单和续期
SELECT t.险种代码,t.险种名称,t.分公司代码,
(SELECT name FROM ldcom WHERE comcode = t.分公司代码 || '0000') 分公司名称,
t.总保费 FROM (SELECT
b.riskcode 险种代码,
b.riskname 险种名称,
substr(a.managecom,1,4) 分公司代码,
--(SELECT t.name FROM ldcom t WHERE t.comcode = substr(a.managecom,1,4) || '0000') 分公司名称,
SUM(
CASE
WHEN (d.payyears >= 10 AND d.payintv <> '0') THEN
a.SumActuPayMoney*1
WHEN (d.payyears < 10 AND d.payintv <> '0') THEN
a.SumActuPayMoney*(d.payyears/10)
WHEN (d.payintv = '0') THEN
a.SumActuPayMoney*0.1
END
) 总保费
FROM ljapayperson a, lmrisk b, ldcom c, lcpol d
WHERE a.riskcode = b.riskcode
AND a.managecom = c.comcode
AND a.polno = d.polno
AND a.managecom LIKE substr(a.managecom,1,4)|| '%'
AND d.appflag <> '0'
AND d.salechnl in ('1','3') --销售渠道
AND a.paytype = 'ZC' --正常交费
--AND a.paytypeflag = '1' --续期 其它则不是
AND a.confdate BETWEEN date'2009-01-01' AND date'2009-03-31' --生效日期
GROUP BY b.riskcode, b.riskname,substr(a.managecom,1,4)) t
AND b.managecom LIKE substr(c.comcode,1,4)||'%'
sum计算的是b表的数据
也因此在这里两表要通过like来连接
你真的有去试着运行吗..
无语
我试的时候把c.comcode 换成了 b.managecom 所以出来的结果不对.
谢谢了!