日期:2014-05-16  浏览次数:20829 次

高分求教-数据调取出来的后期处理,将一个值分解为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