大神帮我看下这个sql语句

BAOZO 2014-08-28 01:53:38


我想要汇总一张单据的金额,但为什么汇总出来的金额不对,请教下大神sql语句哪里写得不对
...全文
337 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdhp 2014-08-29
  • 打赏
  • 举报
回复
引用 18 楼 BAOZO 的回复:
[quote=引用 15 楼 sdhp 的回复:] 你这个语句肯定那里的条件有问题,用distinct看起来是可以解决问题,但是如果遇到相同金额的就会错了
是哦,那要怎么办呢[/quote] 如楼上版主所说,你要先查一下为什么会有这么多重复数据,我们不知道你表之间的关系所以也没法给出改正意见 简单的方法是一张表一张表的排除 第一步 select col1,col2,... from a join b on ... where ...看看有没有重复然后不断增加表select col1,... from a join b on ... join c on ... where ...直到发现有重复数据,就可以知道是哪张表的连接条件有问题,然后才可以改进
發糞塗牆 2014-08-29
  • 打赏
  • 举报
回复
你这个看起来不重复是因为用了group by所有列,这个效果等于distinct
發糞塗牆 2014-08-29
  • 打赏
  • 举报
回复
引用 28 楼 BAOZO 的回复:
[quote=引用 27 楼 DBA_Huangzj 的回复:] 是A表的,但是可能因为E表的影响导致数据又重复了
这样不会重复,但是要怎么汇总起来呢[/quote]你去掉截图中的最后group by那句看看是不是重复,如果是,就要预先去重
sdhp 2014-08-29
  • 打赏
  • 举报
回复
引用 21 楼 BAOZO 的回复:
[quote=引用 20 楼 sdhp 的回复:] [quote=引用 18 楼 BAOZO 的回复:] [quote=引用 15 楼 sdhp 的回复:] 你这个语句肯定那里的条件有问题,用distinct看起来是可以解决问题,但是如果遇到相同金额的就会错了
是哦,那要怎么办呢[/quote] 如楼上版主所说,你要先查一下为什么会有这么多重复数据,我们不知道你表之间的关系所以也没法给出改正意见 简单的方法是一张表一张表的排除 第一步 select col1,col2,... from a join b on ... where ...看看有没有重复然后不断增加表select col1,... from a join b on ... join c on ... where ...直到发现有重复数据,就可以知道是哪张表的连接条件有问题,然后才可以改进[/quote] 查出来是GSP_RKYS这张表的连接条件出现错误了,请问怎么改进呢[/quote] join GSP_RKYS e(nolock) on a.xgdjbh=e.xgdjbh 改成 join (select distinct xgdjbh,yanshr from GSP_RKYS) e(nolock) on a.xgdjbh=e.xgdjbh
BAOZO 2014-08-29
  • 打赏
  • 举报
回复
引用 27 楼 DBA_Huangzj 的回复:
是A表的,但是可能因为E表的影响导致数据又重复了



这样不会重复,但是要怎么汇总起来呢
發糞塗牆 2014-08-29
  • 打赏
  • 举报
回复
是A表的,但是可能因为E表的影响导致数据又重复了
BAOZO 2014-08-29
  • 打赏
  • 举报
回复
引用 25 楼 DBA_Huangzj 的回复:
那就distinct掉
select sum(a.je),e.yanshr FROM( select distinct a.is_sfyp,a.djbh,a.rq,a.ontime,a.bm,a.ywy,a.username,b.danwbh,b.dwmch,b.lxr,c.je,a.jingd,a.yshy,a.xgdjbh,a.is_chonghong,a.dj_chonghong,a.is_fp,a.beizhu,b.lxrdh from jh_rkhz a(nolock) join mchk b(nolock) on a.dwbh=b.dwbh join jh_rkmx c(nolock) on a.djbh=c.djbh where a.djbh like 'JHA%' and c.chonghdjbh like case when :v_ch = '是' then '%' else '' end and a.djbh like '%104331')a,GSP_RKYS e where a.xgdjbh=e.xgdjbh group by e.yanshr 为什么我这里的金额不是a表的金额呢
發糞塗牆 2014-08-29
  • 打赏
  • 举报
回复
那就distinct掉
BAOZO 2014-08-29
  • 打赏
  • 举报
回复
引用 23 楼 DBA_Huangzj 的回复:
如果数据重复是合理的话,就用distinct去重,但是你要考虑这个重复值,是要简单去重还是要sum?
数据重复不合理的,那些是关联的时候出错的,我只是想计算出那个准确的金额
發糞塗牆 2014-08-29
  • 打赏
  • 举报
回复
如果数据重复是合理的话,就用distinct去重,但是你要考虑这个重复值,是要简单去重还是要sum?
BAOZO 2014-08-29
  • 打赏
  • 举报
回复
引用 19 楼 DBA_Huangzj 的回复:
这个跟数据库设计有关系,而且也和业务要求有关系,group by那么多列,要重复的话,为什么可以存在那么多重复数据?
版主你好,查出来是连接了GSP_RKYS这张表导致了出现重复数据,请问连接要怎么写呢
BAOZO 2014-08-29
  • 打赏
  • 举报
回复
引用 20 楼 sdhp 的回复:
[quote=引用 18 楼 BAOZO 的回复:] [quote=引用 15 楼 sdhp 的回复:] 你这个语句肯定那里的条件有问题,用distinct看起来是可以解决问题,但是如果遇到相同金额的就会错了
是哦,那要怎么办呢[/quote] 如楼上版主所说,你要先查一下为什么会有这么多重复数据,我们不知道你表之间的关系所以也没法给出改正意见 简单的方法是一张表一张表的排除 第一步 select col1,col2,... from a join b on ... where ...看看有没有重复然后不断增加表select col1,... from a join b on ... join c on ... where ...直到发现有重复数据,就可以知道是哪张表的连接条件有问题,然后才可以改进[/quote] 查出来是GSP_RKYS这张表的连接条件出现错误了,请问怎么改进呢
發糞塗牆 2014-08-28
  • 打赏
  • 举报
回复
这个跟数据库设计有关系,而且也和业务要求有关系,group by那么多列,要重复的话,为什么可以存在那么多重复数据?
BAOZO 2014-08-28
  • 打赏
  • 举报
回复
引用 15 楼 sdhp 的回复:
你这个语句肯定那里的条件有问题,用distinct看起来是可以解决问题,但是如果遇到相同金额的就会错了
是哦,那要怎么办呢
BAOZO 2014-08-28
  • 打赏
  • 举报
回复
引用 14 楼 DBA_Huangzj 的回复:
SELECT a.is_sfyp,a.djbh,a.rq,SUM(a.je) je,a.jingd,a.yshy,a.yanshr,a.xgdjbh
FROM (
select distinct a.is_sfyp,a.djbh,a.rq,c.je,a.jingd,a.yshy,e.yanshr,a.xgdjbh
  from jh_rkhz a(nolock)
       join mchk b(nolock) on a.dwbh=b.dwbh
       join jh_rkmx c(nolock) on a.djbh=c.djbh
       join GSP_RKYS e(nolock) on a.xgdjbh=e.xgdjbh
  where a.djbh like 'JHA%' 
        and c.chonghdjbh like case when :v_ch = '是' then '%' else '' end
        and a.djbh like '%104331'
  )a
group by a.is_sfyp,a.djbh,a.rq,a.jingd,a.xgdjbh,a.yshy,a.yanshr
大神你对了,谢谢你,你是最棒的
pursuer_chen 2014-08-28
  • 打赏
  • 举报
回复
语句写的真没卖相啊
sdhp 2014-08-28
  • 打赏
  • 举报
回复
你这个语句肯定那里的条件有问题,用distinct看起来是可以解决问题,但是如果遇到相同金额的就会错了
發糞塗牆 2014-08-28
  • 打赏
  • 举报
回复
SELECT a.is_sfyp,a.djbh,a.rq,SUM(a.je) je,a.jingd,a.yshy,a.yanshr,a.xgdjbh
FROM (
select distinct a.is_sfyp,a.djbh,a.rq,c.je,a.jingd,a.yshy,e.yanshr,a.xgdjbh
  from jh_rkhz a(nolock)
       join mchk b(nolock) on a.dwbh=b.dwbh
       join jh_rkmx c(nolock) on a.djbh=c.djbh
       join GSP_RKYS e(nolock) on a.xgdjbh=e.xgdjbh
  where a.djbh like 'JHA%' 
        and c.chonghdjbh like case when :v_ch = '是' then '%' else '' end
        and a.djbh like '%104331'
  )a
group by a.is_sfyp,a.djbh,a.rq,a.jingd,a.xgdjbh,a.yshy,a.yanshr
BAOZO 2014-08-28
  • 打赏
  • 举报
回复
引用 11 楼 DBA_Huangzj 的回复:
改一下
SELECT a.is_sfyp,a.djbh,a.rq,SUM(a.je) je,a.jingd,a.yshy,a.yanshr,a.xgdjbh
FROM (
select a.is_sfyp,a.djbh,a.rq,c.je,a.jingd,a.yshy,e.yanshr,a.xgdjbh
from jh_rkhz a(nolock)
join mchk b(nolock) on a.dwbh=b.dwbh
join jh_rkmx c(nolock) on a.djbh=c.djbh
join GSP_RKYS e(nolock) on a.xgdjbh=e.xgdjbh
where a.djbh like 'JHA%'
and c.chonghdjbh like case when :v_ch = '是' then '%' else '' end
and a.djbh like '%104331'
)a
group by a.is_sfyp,a.djbh,a.rq,a.jingd,a.xgdjbh,a.yshy,a.yanshr


改了,算出来这两个答案是一样的,这是from里的语句,汇总出来很多重复了,导致金额出错
BAOZO 2014-08-28
  • 打赏
  • 举报
回复
引用 10 楼 chz415767975 的回复:
你把数据导出放excel 算一下,看差多少
差很多呢
加载更多回复(11)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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