日期:2014-05-17  浏览次数:20374 次

sel server 2008 数据累加
有两张表A,B 分别记录用户的订购及退订信息:
A: aphonenum (varchar(100)),aupload(datetime)
B:  bphonenum (varchar(100)),bupload(datetime),del(datetime)
A 表列分别表示:号码,开通时间,B表 只比A多个 退订时间 del
现在要求:查出13年1-11月每月的累计用户和。例如 查询 一月 的和即:
select(select count(*) from A where aupload<'2013-2-1')
+
(select count(*) from B where bupload<'2013-2-1' and del>='2013-2-1')
得出 一月的总数,2月以此类推,时间2013-2-1 变成 2013-3-1,最后要求的数值 就是1月查出来的加上2月的,以此类推到需要查到的月份,
现在 想可不可以 一次性查出结果,或者对应每月的数量列举出来,一个月一个月的查 速度太慢,哪位大神能指导下,万分感谢!

------解决方案--------------------
try this,

select x.number '月份',
       t.qty '累计用户和'
from
(select number
 from master.dbo.spt_values
 where type='P' and number between 1 and 11) x
outer apply
(select (select count(*) from A
         where aupload<dateadd(m,number-1,'2013-2-1'))
       +(select count(*) from B 
         where bupload<dateadd(m,number-1,'2013-2-1') and del>=dateadd(m,number-1,'2013-2-1')) 'qty') t