求句应付期末金额的sql

abcwps 2009-11-05 04:14:12
有个表cashdue 字段如下
number,supplycode,brief,amount1,amount2,amount3,amount4
001 001 办公费用 100 0 20 30
002 001 货款支出 200 50 20 30
003 001 货款支出 300 50 20 30
003 001 货款支出 400 0 20 30
这些信息为应付账款信息
现在要的结果集如下
number,supplycode,brief,amount1,amount2,amount3,amount4,balance
期初余额 1500 0 0 0 1500
001 001 办公费用 100 0 20 30 1550
002 001 货款支出 200 50 20 30 1650
003 001 货款支出 300 50 20 30 1850
003 001 货款支出 400 0 20 30 2150
balance的值是上一行的balance+本行(amount1-amount2-amount3-amount4)
sql我是写出来了,但是很没效率居然比游标还要慢,测试数据1W条,游标17秒,我那句10分钟
主要是先排序出行号,在以行号来算出此行之前有几行数据,然后在汇总,在连接。我不太懂优化,
我希望大家能以1W条数据来测试。
...全文
81 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
QWZT2006 2009-11-05
  • 打赏
  • 举报
回复
你可以用临时表的方法来做一下
joyce2004z 2009-11-05
  • 打赏
  • 举报
回复
SELECT number = '',
supplycode = '',
brief = '期初余额',
amount1 = 1500,
amount2 = 0,
amount3 = 0,
amount4 = 0,
balance = 1500
UNION ALL
SELECT cashdue.number,
cashdue.supplycode,
cashdue.brief,
cashdue.amount1,
cashdue.amount2,
cashdue.amount3,
cashdue.amount4,
balance = SUM(A.balance)
FROM cashdue
LEFT JOIN (SELECT number,
supplycode,
brief,
amount1,
amount2,
amount3,
amount4,
balance = amount1-amount2-amount3-amount4
FROM cashdue
UNION ALL
SELECT number = '',
supplycode = '',
brief = '期初余额',
amount1 = 1500,
amount2 = 0,
amount3 = 0,
amount4 = 0,
balance = 1500) A
ON CONVERT(int,cashdue.number) <= CONVERT(int,A.number)
OR A.number = ''
GROUP BY cashdue.number,
cashdue.supplycode,
cashdue.brief,
cashdue.amount1,
cashdue.amount2,
cashdue.amount3,
cashdue.amount4

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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