sql 统计问题

zoujp_xyz 2009-04-27 05:29:48
CREATE TABLE bill
(
Bill_id VARCHAR(20), --单据号
Master_bill_id VARCHAR(20), --主单据号
CreateTime DATETIME ,
Amount DECIMAL ,
Flag INT

)

INSERT INTO bill SELECT 'B0001','','2009-4-1',2000,1
UNION ALL SELECT 'B0002','','2009-4-1',5000,1
UNION ALL SELECT 'B0003','B0001','2009-4-5',1500,0
UNION ALL SELECT 'B0004','B0002','2009-5-5',4000,0
UNION ALL SELECT 'B0005','','2009-5-5',2000,0


注:Master_bill_id 是Bill_id 的新单据
就是变更了之后的 (flag 为1时表示单据作废了金额需要释放出来)
想得到如下结果:

年 月份 , 金额
2009 4 4000 (单据B0003是单据B0001更改后的需要减掉单据B0001的金额)
2009 5 1000 (单据B0004是单据B0002更改后的需要减掉单据B0002的金额)
...全文
95 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
usher_gml 2009-04-27
  • 打赏
  • 举报
回复
搞定.结帖吧..
  • 打赏
  • 举报
回复
到底是6500还是4500,6500的话看看4楼的

IF OBJECT_ID('bill') IS NOT NULL
DROP TABLE bill
Go
CREATE TABLE bill
(
Bill_id VARCHAR(20), --单据号
Master_bill_id VARCHAR(20), --主单据号
CreateTime DATETIME ,
Amount DECIMAL ,
Flag INT

)

INSERT INTO bill
SELECT 'B0001','','2009-4-1',2000,1
UNION ALL SELECT 'B0002','','2009-4-1',5000,1
UNION ALL SELECT 'B0003','B0001','2009-4-5',1500,0
UNION ALL SELECT 'B0004','B0002','2009-5-5',4000,0
UNION ALL SELECT 'B0005','','2009-5-5',2000,0
select * from bill

select 年=year(s.createtime),月=month(s.createtime),金额=sum(s.amount)-sum(t.amount)
from bill s left join bill t on t.bill_id=s.Master_bill_id
group by year(s.createtime),month(s.createtime)


年 月 金额
2009 4 6500
2009 5 1000
sdhdy 2009-04-27
  • 打赏
  • 举报
回复
问题解决了?来晚了。
zoujp_xyz 2009-04-27
  • 打赏
  • 举报
回复
呵呵。。。我说错了。楼上正解
Yang_ 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zoujp_xyz 的回复:]
晕,改了一下数据 应该是4500
[/Quote]

4500也不多哦
应该6500
dave080 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Yang_ 的回复:]
你的数据是不是贴错了?
4月怎么计算?好像怎么都有500的,不会整4000
[/Quote]
是啊,你又说4500,我怎么不知道你怎么算出来的?
ai_li7758521 2009-04-27
  • 打赏
  • 举报
回复
没看懂..
  • 打赏
  • 举报
回复
IF OBJECT_ID('bill') IS NOT NULL 
DROP TABLE bill
Go
CREATE TABLE bill
(
Bill_id VARCHAR(20), --单据号
Master_bill_id VARCHAR(20), --主单据号
CreateTime DATETIME ,
Amount DECIMAL ,
Flag INT

)

INSERT INTO bill
SELECT 'B0001','','2009-4-1',2000,1
UNION ALL SELECT 'B0002','','2009-4-1',5000,1
UNION ALL SELECT 'B0003','B0001','2009-4-5',1500,0
UNION ALL SELECT 'B0004','B0002','2009-5-5',4000,0
UNION ALL SELECT 'B0005','','2009-5-5',2000,0
select * from bill

select 年=year(s.createtime),月=month(s.createtime),金额=sum(s.amount)-sum(t.amount)
from bill s left join bill t
on t.bill_id=s.Master_bill_id
group by year(s.createtime),month(s.createtime)
Yang_ 2009-04-27
  • 打赏
  • 举报
回复
你的数据是不是贴错了?
4月怎么计算?好像怎么都有500的,不会整4000
zoujp_xyz 2009-04-27
  • 打赏
  • 举报
回复
晕,改了一下数据 应该是4500
  • 打赏
  • 举报
回复
你的2009 4 4000--4000是怎么计算出来的?

34,576

社区成员

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

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