注册 登录
编程论坛 SQL Server论坛

SQL SERVER 数据累加

遗忘的爱 发布于 2013-01-15 15:21, 1539 次点击
ID       开始日期    结束日期     数量
1      2012-10-1     2012-10-31     100
1      2012-11-1     2012-11-31     50
2      2012-10-1     2012-10-31     60
3      2012-10-1     2012-10-31     100
怎么把其他ID里与ID 1 时间相同的数据累加,得出下表
开始日期       结束日期      数量
2012-10-1     2012-10-31     160
2012-11-1     2012-11-31     50
10 回复
#2
卓文2013-01-15 20:28
楼主到底要表达什么意思?
#3
cnfarer2013-01-16 06:33
为什么不是260,而是160?
#4
遗忘的爱2013-01-16 09:32
额,不好意思 写错了,应该是
ID       开始日期    结束日期     数量
1      2012-10-1     2012-10-31     100
1      2012-11-1     2012-11-31     50
2      2012-10-1     2012-10-31     60
3      2012-10-2     2012-10-31     100
4      2012-10-1     2012-10-31     30

把ID为1的开始日期和结束日期作为标准,
ID       开始日期    结束日期       数量
1      2012-10-1     2012-10-31     100
1      2012-11-1     2012-11-31     50
假设要在指定的ID(3)和ID(4)中找出开始日期和结束日期都与ID(1)相同的数据,把数量加到ID(1)的数量上
ID       开始日期    结束日期      数量
1      2012-10-1     2012-10-31     100 +30
1      2012-11-1     2012-11-31     50


[ 本帖最后由 遗忘的爱 于 2013-1-16 10:18 编辑 ]
#5
遗忘的爱2013-01-16 10:24
程序代码:
select 开始日期,结束日期,
数量=(select sum(数量)  from 表 j where (j.ID='3' or j.ID='4') and i.开始日期=j.开始日期 and i.结束日期=j.结束日期)
from 表 i,
where i.ID='1'
group by i.开始日期,i.结束日期
这是我的代码,算出来的结果有点问题,大家能帮忙看看是什么问题吗?
#6
洋葱头1582013-01-16 13:24
不太懂耶!
#7
半杯清茶2013-01-16 15:56
select tb2.id,tb1.startdate,tb1.enddate,sum(num) from  tb tb1 ,(select id ,startdate,enddate,num from tb where tb.id='1')tb2
 where tb1.startdate=tb2.enddate and tb1.enddate=tb2.enddate
group by  tb2.id,tb1.startdate,tb1.enddate


试试!!!
#8
遗忘的爱2013-01-16 21:27
以下是引用半杯清茶在2013-1-16 15:56:15的发言:

select tb2.id,tb1.startdate,tb1.enddate,sum(num) from  tb tb1 ,(select id ,startdate,enddate,num from tb where tb.id='1')tb2
 where tb1.startdate=tb2.enddate and tb1.enddate=tb2.enddate
group by  tb2.id,tb1.startdate,tb1.enddate
 
 
试试!!!
列名num不明确,这段代码还没有指定ID(3)和ID(4).
#9
遗忘的爱2013-01-16 21:34
我现在的思路是把ID 1、3、4的数据取出来放到临时表里,然后再从临时表查询累加。
程序代码:
select * into #temp fromwhere id in('1','3','4')
select starttime,endtime,数量=(select SUM(num) from #temp j where i.starttime=j.starttime and i.endtime=j.endtime)
from #temp i
where i.id='1'
group by i.starttime,i.endtime

碰到问题是,怎么从数据库里取多行数据,可能是要取ID为1、2、3行的数据,也有可能取 2、4,这个用存储过程可以实现吗?语句是什么?
#10
遗忘的爱2013-01-16 22:06
我现在的思路是把ID 1、3、4的数据取出来放到临时表里,然后再从临时表查询累加。
程序代码:
select * into #temp fromwhere id in('1','3','4')
select starttime,endtime,数量=(select SUM(num) from #temp j where i.starttime=j.starttime and i.endtime=j.endtime)
from #temp i
where i.id='1'
group by i.starttime,i.endtime

碰到问题是,怎么从数据库里取多行数据,可能是要取ID为1、2、3行的数据,也有可能取 2、4,这个用存储过程可以实现吗?语句是什么?
#11
半杯清茶2013-01-21 16:51
不好意思,前面的有点粗心.这个我测试过了.
select 1,tb1.startdate,tb1.enddate,sum(tb1.num) from  TestNum tb1 , (select id ,startdate,enddate,num from TestNum where id='1')tb2
where tb1.startdate=tb2.startdate and tb1.enddate=tb2.enddate

group by  tb1.startdate,tb1.enddate
1