高分求教-数据调取出来的后期处理,将一个值分解为4个的办法?
本帖最后由 bdbody 于 2014-02-23 10:21:14 编辑
我在用bo后做报表的时候后期处理数据时遇到了一个问题
最初显示结果为
税种 金额
99 13
14 113
20 200
合计 326
希望得到的结果是
税种 金额
10 14
11 6
12 4
13 2
14 100
20 200
合计 326
我说下我的需求:
(1)将税种代码为99的分解为10、11、12、13四个税种代码,结果是
10=99的金额/13*7
11=99的金额/13*3
12=99的金额/13*2
13=99的金额/13*1
(2)将税种代码为14的分解为10、11、12、13、14五个税种代码,结果是
10=14的金额/1.13*0.07
11=14的金额/1.13*0.03
12=14的金额/1.13*0.02
13=14的金额/1.13*0.01
14=14的金额/1.13(保留了14税种,将其值做了除以1.13处理)
(3)合并10、11、12、13税种
(4)其余税种不做改变
我先说下我怎么做的
我用的是 定义一个变量
变量名:税种分类
公 式:=if(<税种分类>="99" then 金额/1.13*0.07 else if<税种分类>="99" then 金额/1.13*0.03 )
我不会将99如何分成10、11、12、13 出来 因为数据库里本身没有10、11、12、13这4个税种。。。。。。
------解决方案--------------------我写了一个代码比较长,逻辑不复杂,但是比较死的,楼主可以对应入座,把写死的地方对应到变量就可以了
with test_tabel as
(select 99 as "税种", 13 "金额"
from dual
union all
select 14 as"税种", 113 "金额"
from dual
union all
select 20 as "税种", 200 "金额" from dual)--创建你的实际表
select tt.b,
sum(case
when tt.a = 99 then
test_tabel.金额 / 13 * tt.c
when tt.a = 14 then
test_tabel.金额 / 1.13 * tt.c
when tt.a = 20 then
test_tabel.金额--主要是在这里进行汇总,也就是你的第三步
end) a
from (select 99 a, 10 b, 7 c
from dual
union
select 99 a, 11 b, 3 c
from dual
union
select 99 a, 12 b, 2 c
from dual
union
select 99 a, 13 b, 1 c
from dual