各位帮忙看看这条sql语句怎么写?急!

madking 2004-10-08 09:16:03
ls_sql := 'insert into jfr_dianftj_temp
select b.jiryf,b.dianjdm,b.beiz
-- ,count(distinct b.huh||b.dianjdm)
-- ,sum(b.dianl)
,0
,0
,0
,nvl(sum(b.muldj),0)
,nvl(sum(b.sanxjj),0)
,nvl(sum(b.chengsfj),0)
,sum(decode(sign(b.litdf),1,b.litdf,0))
,sum(decode(sign(b.litdf),-1,b.litdf,0))
,nvl(sum(b.jifrl),0)
,nvl(sum(b.rongldf),0)
,nvl(sum(b.jifxl),0)
,nvl(sum(b.xuldf),0)
,''2''
from sf_shoufjl a,jf_tuibdf b,yda_gongddw g
where g.cengcbm like :0
and a.gongddw = g.danwbh
and (g.shujtjfs = ''1'' or g.shujtjfs = ''2'')
and a.rukfs = ''2'' and a.shoufsj >= :1 and a.shoufsj < :2
and b.huh = a.huh
and a.yingsje<>0
and b.jiryf = a.yuef
-- and b.ruksj = a.jiesrq --完全匹配时间的话符合条件的记录很少
-- and to_char(b.ruksj,''yyyymmdd'') = to_char(a.jiesrq,''yyyymmdd'')
and b.chulbz = ''已入库''
group by b.jiryf,b.dianjdm,b.beiz';
execute immediate ls_sql using ls_ccbm,ld_ksrq,ld_jzrq; --当月调价退补

现在的问题是b表大部分数据都有两条记录和a表匹配,目前的问题就是上面的sql统计出来的数据基本上是b表原始数据的两倍。请问应该怎么修改才能得到正确的结果?
...全文
133 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
madking 2004-10-13
  • 打赏
  • 举报
回复
楼上的方法也不行,最后是换了一种写法搞定!
谢谢了!
bzszp 2004-10-08
  • 打赏
  • 举报
回复
try:
select jiryf,dianjdm,beiz,col1,col2,col3,col4,col5,col6,col7,col8,col9,col10,col11,col12,col13 from (
select b.jiryf,b.dianjdm,b.beiz
,0 col1
,0 col2
,0 col3
,nvl(sum(b.muldj),0) col4
,nvl(sum(b.sanxjj),0) col5
,nvl(sum(b.chengsfj),0) col6
,sum(decode(sign(b.litdf),1,b.litdf,0)) col7
,sum(decode(sign(b.litdf),-1,b.litdf,0)) col8
,nvl(sum(b.jifrl),0) col9
,nvl(sum(b.rongldf),0) col10
,nvl(sum(b.jifxl),0) col11
,nvl(sum(b.xuldf),0) col12
,''2'' col13
,rank() over(partition by b.jiryf,b.dianjdm,b.beiz order by b.jiryf,b.dianjdm,b.beiz) rk
from sf_shoufjl a,jf_tuibdf b,yda_gongddw g
where g.cengcbm like :0
and a.gongddw = g.danwbh
and (g.shujtjfs = ''1'' or g.shujtjfs = ''2'')
and a.rukfs = ''2'' and a.shoufsj >= :1 and a.shoufsj < :2
and b.huh = a.huh
and a.yingsje<>0
and b.jiryf = a.yuef

and b.chulbz = ''已入库''
group by b.jiryf,b.dianjdm,b.beiz
) t where rk=1
madking 2004-10-08
  • 打赏
  • 举报
回复
是这样,b表中的两条记录都是要的,目前我的写法是因为有两条记录匹配,结果两条记录都重复sum了一次,我想要的不是只取一条记录的数据。
zmgowin 2004-10-08
  • 打赏
  • 举报
回复
将from中的表改为
from
sf_shoufjl a,
(select distinct ... from jf_tuibdf) b,
yda_gongddw g

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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