问一个SQL语句

nightfallrove 2004-06-18 08:28:55
有一个表名为sale其部分结构和示例数据如下
编号, 月分,金额
P001 01 100

P002 01 150

P001 02 300

P002 02 200
现在要根据用户输入的月分查出一个如下结构的记录集
编号 期初数 本月数 期末数

比如用户输入02查询结果就应该是
P001 100 300 400
P002 150 200 350
就是说期初数是用户输入的月份以前的所有月的金额之和
本月数是用户输入的月分的金额
期末数是上两个数据的和
这个查询该怎么写?谢谢
(编号,月分)是主码
...全文
104 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
CsdnRob 2004-07-01
ding
回复
nightfallrove 2004-06-20
谢谢,
结帐了。
回复
pengda1i 2004-06-18
冒牌力争做到假冒不伪劣
回复
zjcxc 元老 2004-06-18
冒牌的写法存在一个问题,如果本月没有发生,而上月有发生的话,则不会被查询出来
回复
zjcxc 元老 2004-06-18

--定义要查询的参数
declare @月份 char(2)
set @月份='02'

--查询语句
select 编号=isnull(a.编号,b.编号)
,期初数=isnull(a.金额,0)
,本月数=isnull(b.金额,0)
,期末数=isnull(a.金额,0)+isnull(b.金额,0)
from(
--计算期初
select 编号,金额=sum(金额)
from sale
where 月份<@月份
group by 编号
)a full join(
--计算本月
select 编号,金额=sum(金额)
from sale
where 月份=@月份
group by 编号
)b on a.编号=b.编号
回复
nightfallrove 2004-06-18

什么东西都有假冒伪劣啊
不过楼上不错
已经真假难辨了,呵呵,
谢谢
回复
pengda1i 2004-06-18
select 编号,
isnull((select sum(金额) from sale where 编号=a.编号 and 月分<a.月分),0) as 期初数,
金额 as 本月数,
isnull((select sum(金额) from sale where 编号=a.编号 and 月分<=a.月分),0) as 期末数
from sale a
where 月分='02'
回复
pengda1i 2004-06-18
select 编号,
isnull((select sum(金额) from sale where 编号=a.编号 and 月分<a.月分),0) as 期初数,
sum(金额) as 本月数,
isnull((select sum(金额) from sale where 编号=a.编号 and 月分<=a.月分),0) as 期末数
from sale a
where 月分='02'
group by 编号

回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2004-06-18 08:28
社区公告
暂无公告