有两张表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