Sql报表问题求助,怎么计算同一个字段并且赋值给这个字段的不同行

最英俊的恐龙 2018-08-15 05:17:35

最后一栏的数据怎么算出来并且已union的方式加在当前的最下方,目前前两栏已经解决
select tA.*,
tA.ZS + tA.SY + tA.TP + tA.SX + tA.QT HJ from (select JG as FGS,'当前时间员工状态' as persontype ,
sum(case when ZTBM = 001 then 1 else 0 end) as ZS,
sum(case when ZTBM = 002 then 1 else 0 end) as SY,
sum(case when ZTBM = 014 then 1 else 0 end) as TP,
sum(case when ZTBM = 015 then 1 else 0 end) as SX,
sum(case when ZTBM not in (001,002,014,015) then 1 else 0 end) as QT
from (
select t1.fname_l2 XM,t1.fnumber GH,t2.fnumber JGBM,t2.fname_l2 JG,t3.fname_l2 ZT,t3.fnumber ZTBM ,
to_char(t4.fenterdate,'YYYY-MM-DD') RZRQ
from T_BD_Person t1 left join
t_hr_personposition t4 on t1.fid = t4.fpersonid left join
T_ORG_Admin t2 on t1.fhrorgunitid = t2.fid left join
T_HR_BDEmployeeType t3 on t1.femployeetypeid = t3.fid ) where instr(JG,'分公司') > 1 or JG in ('营业总部','运营支持中心')
group by JG

union all

select JG as FGS,'指定时间员工状态' as persontype ,sum(case when ZTBM = 001 then 1 else 0 end) as ZS,
sum(case when ZTBM = 002 then 1 else 0 end) as SY,
sum(case when ZTBM = 014 then 1 else 0 end) as TP,
sum(case when ZTBM = 015 then 1 else 0 end) as SX,
sum(case when ZTBM not in (001,002,014,015) then 1 else 0 end) as QT
from (
select t1.fname_l2 XM,t1.fnumber GH,t2.fnumber JGBM,t2.fname_l2 JG,t3.fname_l2 ZT,t3.fnumber ZTBM ,
to_char(t4.fenterdate,'YYYY-MM-DD') RZRQ
from T_BD_Person t1 left join
t_hr_personposition t4 on t1.fid = t4.fpersonid left join
T_ORG_Admin t2 on t1.fhrorgunitid = t2.fid left join
T_HR_BDEmployeeType t3 on t1.femployeetypeid = t3.fid where to_char(t4.fenterdate,'YYYY-MM-DD') < parameter('querydate') ) where instr(JG,'分公司') > 1 or JG in ('营业总部','运营支持中心')
group by JG) tA where tA.FGS in (parameter('organization'))

用的是某公司的报表应用,目前执行结果是
现在要求(当月-指定月)/指定月的数据也作为第二列字段的值,加在当前查询结果的下方,这样再用工具做交叉表即可,求教怎么做。
...全文
527 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wildwolv 2018-10-25
  • 打赏
  • 举报
回复
根据你的sql我没办法写代码,只能提供思路给你:把计算当月数据的sql括起来,起个别名a;把计算指定时间数据的sql括起来,起个别名b;a left join b on a.fgs = b.fgs;从这个join里面取fgs、persontype、(a.zs-b.zs)/b.zs as zs、后面的以此类推,算出结果后unioin all
碧水幽幽泉 2018-08-17
  • 打赏
  • 举报
回复
现在要求(当月-指定月)/指定月的数据也作为第二列字段的值,加在当前查询结果的下方,这样再用工具做交叉表即可,求教怎么做。

这种需求比较简单。请按以下格式简单列下你的需求。
1.已知数据如下:
。。。。

2.要求实现如下效果:
。。。。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧