select t_st.动物名称,t_st.存栏数量+nvl(t_ly.来源数量,0)-nvl(t.sq.死去数量,0)-t_ed.存栏数量 as 数量
from 
(select 动物编号,动物名称,存栏数量 from A where 日期=开始日期 ) t_st,
(select 动物编号,存栏数量 from A where 日期=结束日期 ) t_ed,
(select 动物编号,来源数量 from B where 日期 between 开始日期 and 结束日期) t_ly,
(select 动物编号,死去数量 from B where 日期 between 开始日期 and 结束日期) t_sq
where t_st.动物编号=t.ed.动物编号 and t_st.动物编号=t_ly.动物编号(+)
and t_st.动物编号 =t_sq.动物编号(+);

解决方案 »

  1.   

    楼上的
    开始日期和结束日期.还有市,县,乡镇可选,可不选,是通过JAVA传过来的
      

  2.   

    select t_st.动物名称,t_st.存栏数量+nvl(t_ly.来源数量,0)-nvl(t.sq.死去数量,0)-t_ed.存栏数量 as 数量
    from 
    (select 动物编号,动物名称,存栏数量 from A where 日期=开始日期 and 单位编号=nvl(你的参数,单位编号 ) t_st,   <-----------是想要这样的效果吗?参数不输就是所有的.
    (select 动物编号,存栏数量 from A where 日期=结束日期 ) t_ed,
    .....