用ROW_number实现组内逐行累加出现的问题

wzsjzjjxy 2010-11-19 04:33:43
我现在要按项目统计每年每月各个会计科目的借贷情况。
图中贷方(credit)之前的列都是表中的列,u_docnum是会计凭证编号。其他都是派生列。黄色框内是通过row_number函数获得列,debitsum是debit逐行累加的结果,同理creditsum是credit逐行累加结果。
代码如下:
----------------------------

/*项目明细账代码*/ -- 增加docnum
with xmmxz (year,month,prjname,account,acctname,debit,credit,Row_Num,u_docnum)
as
(
select year(t0.refdate) as 'year',month(t0.refdate) as 'Month',
t3.prjname,t1.account,t2.acctname,t1.debit,t1.credit,
row_number()over(partition by t3.prjname,t1.account,t2.acctname,year(t0.refdate),month(t0.refdate)
order by t0.u_docnum) as Row_Num --获得序号
,t0.u_docnum from ojdt t0 inner join jdt1 t1 on t1.transid=t0.transid
inner join oact t2 on t2.acctcode=t1.account
left join oprj t3 on t3.prjcode=t1.project
where t3.prjname is not null and t3.prjname<>'other' --测试使用,实际应用时and t3.prjname<>'other'不加
)
select *,(case
when debitsum-creditsum > 0 then '借'
when debitsum-creditsum = 0 then '平'
else '贷'
end) as '方向'
from
(select t2.year,t2.month,prjname,account,acctname,cast(debit as numeric(10,3)) as debit
,cast(credit as numeric(10,3)) as credit,Row_Num,u_docnum
,(select cast(sum(debit) as numeric(10,3))
from xmmxz t1
where t1.Row_Num<=t2.Row_Num and t1.year=t2.year and t1.month=t2.month and t1.prjname=t2.prjname
and t1.account=t2.account and t1.acctname=t2.acctname) as debitsum --通过自连接(序号)实现累加
,(select cast(sum(t1.credit) as numeric(10,3))
from xmmxz t1
where t1.Row_Num<=t2.Row_Num and t1.year=t2.year and t1.month=t2.month and t1.prjname=t2.prjname
and t1.account=t2.account and t1.acctname=t2.acctname) as creditsum
from xmmxz as t2) as ttt

---------------------------

产生结果如图,但是图中红色框内不是逐行累加,(红色框位置有点不对,各位应该看得懂的),而绿色框内就是逐行累加的。不知道为什么。
...全文
330 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
王向飞 2010-11-19
  • 打赏
  • 举报
回复
把你的列全都拉宽 看看其他字段值有哪些特殊的?
wzsjzjjxy 2010-11-19
  • 打赏
  • 举报
回复
你看下CTE,440是连接后的数据,在cte后面的查询用了cte自身连接,连接推荐其中就是第一个row_num小于等于第二个表的row_num[Quote=引用 14 楼 wxf163 的回复:]
and t1.year=t2.year and t1.month=t2.month and t1.prjname=t2.prjname
and t1.account=t2.account and t1.acctname=t2.acctname

那就是440这行 不满足你的条件,所有没加上他,但为什么只加了一部分呢?
[/Quote]
zoffor 2010-11-19
  • 打赏
  • 举报
回复
仔细检查一下 u_docnum 这个列
在相加的时候可能条件没设好
哈哈 猜的
王向飞 2010-11-19
  • 打赏
  • 举报
回复
and t1.year=t2.year and t1.month=t2.month and t1.prjname=t2.prjname
and t1.account=t2.account and t1.acctname=t2.acctname

那就是440这行 不满足你的条件,所有没加上他,但为什么只加了一部分呢?
wzsjzjjxy 2010-11-19
  • 打赏
  • 举报
回复
测试数据怎么给啊?数据到不是太多,不知道怎么给。[Quote=引用 11 楼 playwarcraft 的回复:]
你不如给出测试数据好了。。。
看程式也看不出所以然
[/Quote]
wzsjzjjxy 2010-11-19
  • 打赏
  • 举报
回复
麻烦你看下4、5楼,我详细解释了,一个错了,就都错了,440是原数据,只是逐行累加产生的那个debitsum派生列不是逐行累加了,会出现跳行累加的情况,但是一个组内,最终累加到最后的总数是对,其他组可能对也可能不对。[Quote=引用 10 楼 wxf163 的回复:]
440显示不对 还是866 以下的计算都不对?
[/Quote]
playwarcraft 2010-11-19
  • 打赏
  • 举报
回复
你不如给出测试数据好了。。。
看程式也看不出所以然
王向飞 2010-11-19
  • 打赏
  • 举报
回复
440显示不对 还是866 以下的计算都不对?
wzsjzjjxy 2010-11-19
  • 打赏
  • 举报
回复
红色框内从866那个数不对了。
wzsjzjjxy 2010-11-19
  • 打赏
  • 举报
回复
图片我重新修改了
wzsjzjjxy 2010-11-19
  • 打赏
  • 举报
回复
对的,图片不知道为什么不显示了。我重新贴。[Quote=引用 6 楼 coolingpipe 的回复:]
貌似我理解的有问题

楼主你贴的图片不全吧?
[/Quote]
冷箫轻笛 2010-11-19
  • 打赏
  • 举报
回复
貌似我理解的有问题

楼主你贴的图片不全吧?
wzsjzjjxy 2010-11-19
  • 打赏
  • 举报
回复
图片看不到了右边,红色框内那个组,第一行是345,累加结果就是345;第二行是382,累加结果应该是382+345=727 也是对的;第三行是440,累加结果应该是727+440,但是实际结果是727+139(第四行)=866了,不知道为什么。
得到的结果有的组内累加是完全正确的。不知道哪儿出问题了。[Quote=引用 3 楼 playwarcraft 的回复:]
没错啊,month是7月的,所以是1
[/Quote]
wzsjzjjxy 2010-11-19
  • 打赏
  • 举报
回复
图片看不到了右边,红色框内那个组,第一行是345,累加结果就是345;第二行是382,累加结果应该是382+345=727 也是对的;第三行是440,累加结果应该是727+440,但是实际结果是727+139(第四行)=866了,不知道为什么。
得到的结果有的组内累加是完全正确的。不知道哪儿出问题了。[Quote=引用 1 楼 coolingpipe 的回复:]
每年每月的。。。没有问题呀

红色的框里,第一条记录是2010年7月的数据,只有一条,所以序号为1
第二条开始为2010年1月份的数据,分别为1,2,3,4

有问题吗?
[/Quote]
playwarcraft 2010-11-19
  • 打赏
  • 举报
回复
没错啊,month是7月的,所以是1
wzsjzjjxy 2010-11-19
  • 打赏
  • 举报
回复
图片看不到了右边,红色框内那个组,第一行是345,累加结果就是345;第二行是382,累加结果应该是382+345=727 也是对的;第三行是440,累加结果应该是727+440,但是实际结果是727+139(第四行)=866了,不知道为什么。
得到的结果有的组内累加是完全正确的。不知道哪儿出问题了。
冷箫轻笛 2010-11-19
  • 打赏
  • 举报
回复
每年每月的。。。没有问题呀

红色的框里,第一条记录是2010年7月的数据,只有一条,所以序号为1
第二条开始为2010年1月份的数据,分别为1,2,3,4

有问题吗?

22,209

社区成员

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

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