求教SQL流水账余额的方法

whenthat 2015-07-11 02:32:05

select t.日期,t.收入,t.付出,(select sum(收入)-sum(付出) from 会计表 where 日期 <= t.日期) as 余额 from 会计表 t

在网上找到这条代码 测试后发现 日期相同的一天查询汇总数 而不是逐行计算出来的!
...全文
777 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2015-07-13
  • 打赏
  • 举报
回复
WITH a AS (
SELECT ROW_NUMBER() OVER (ORDER BY a.日期 ASC) 序号,
日期, 收入, 支出
FROM MX
WHERE 物料编号=001
)
,r AS (
SELECT *,
收入-支出 余额
FROM a
WHERE 序号 = 1
UNION ALL
SELECT a.*,
r.余额+a.收入-a.支出 余额
FROM r
JOIN a
ON r.序号+1 = a.序号
)
SELECT *
FROM r
道玄希言 2015-07-12
  • 打赏
  • 举报
回复
大概可以这么写, 手打的代码。。。 ;with cte as ( SELECT ROW_NUMBER() OVER (ORDER BY 日期 ASC) 序号, 日期, 收入, 支出 from MX where 物料编号=001 ) SELECT 序号, 日期, 收入, 支出, (SELECT SUM(收入)-SUM(支出) FROM cte WHERE 序号 <= t.序号) AS 余额 FROM cte AS t
whenthat 2015-07-12
  • 打赏
  • 举报
回复
引用
你日期设置应该是 date, 而不是 datetime 类型的。 日期相同的时候, 只有时间不同 , 查询出来结果,才会是逐行统计出来了。 如果你日期字段为date类型 , 想日期相同天, 能逐行统计, 那么需要增加自增字段, 余额统计是的条件, 就用自增字段, 而不是用日期字段了。
数据表字段:物品编号,日期,收入,支出

SELECT ROW_NUMBER() OVER (ORDER BY a.日期 ASC) 序号,a.日期, a.收入, a.支出,(select sum(收入)-sum(支出) from MX where --序号无法使用--) 余额
FROM  MX a
where 物料编号=001
后面不知道怎么写,求指点!
道玄希言 2015-07-11
  • 打赏
  • 举报
回复
日期字段不重复, 这么写:

SELECT t.id, t.dt, t.fin, t.fout, (SELECT SUM(fin)-SUM(fout) 
FROM tbl04 WHERE dt <= t.dt) AS 余额 FROM tbl04 AS t


/**********************************************************************************************/
id	dt	                fin	         fout	        余额
1	2015-01-01 00:00:00	50.00000000	20.00000000	30.00000000
2	2015-01-02 00:00:00	60.00000000	50.00000000	40.00000000
3	2015-01-02 01:00:00	100.00000000	30.00000000	110.00000000
4	2015-01-02 03:00:00	10.00000000	20.00000000	100.00000000
5	2015-01-03 00:00:00	50.00000000	60.00000000	90.00000000
日期不唯一, 用自增字段来区分:

SELECT t.id, t.dt, t.fin, t.fout, (SELECT SUM(fin)-SUM(fout) 
FROM tbl04 WHERE id <= t.id) AS 余额 FROM tbl04 AS t


/**********************************************************************************************/
id	dt	                         fin	                fout	                余额
1	2015-01-01 00:00:00	50.00000000	20.00000000	30.00000000
2	2015-01-02 00:00:00	60.00000000	50.00000000	40.00000000
3	2015-01-02 00:00:00	100.00000000	30.00000000	110.00000000
4	2015-01-02 03:00:00	10.00000000	20.00000000	100.00000000
5	2015-01-03 00:00:00	50.00000000	60.00000000	90.00000000
道玄希言 2015-07-11
  • 打赏
  • 举报
回复
你日期设置应该是 date, 而不是 datetime 类型的。 日期相同的时候, 只有时间不同 , 查询出来结果,才会是逐行统计出来了。 如果你日期字段为date类型 , 想日期相同天, 能逐行统计, 那么需要增加自增字段, 余额统计是的条件, 就用自增字段, 而不是用日期字段了。
Cherise_huang 2015-07-11
  • 打赏
  • 举报
回复
可以再把问题描述的清楚一点吗?或者给出表

34,836

社区成员

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

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