sql 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月的,以此类推到需要查到的月份,
现在 想可不可以 一次性查出结果,或者对应每月的数量列举出来,一个月一个月的查 速度太慢,哪位大神能指导下,万分感谢!

给你个参考哈  之前用到过的。使用了表值函数,表值函数如下:

-- =============================================
-- Author: Rock
-- Create date: 2012-01-15
-- Description: 根据日期范围按月为单位 生成月份数据
-- =============================================
CREATE FUNCTION [dbo].[GET_GeneratedMonth]
(
-- Add the parameters for the function here
@StartDate DATETIME, 
@EndDate DATETIME
)
RETURNS 
@TmpDayTable TABLE 
(
-- Add the column definitions for the TABLE variable here
GeneratedDate DATETIME
)
AS
BEGIN
-- Fill the table variable with the rows for your result set
DECLARE @day INT
SET @day = DATEDIFF(MONTH,@StartDate, @EndDate)
DECLARE @i INT
SET @i = 0

WHILE  @i<=@day
BEGIN 
    INSERT @TmpDayTable ( GeneratedDate ) VALUES (DATEADD(MONTH,@i,@StartDate))
    SET @i=@i+1
END
RETURN 
END

这个表值函数的作用是:根据日期范围按月为单位 生成月份数据  如 传入的日期范围是  2013-01-01----2013-11-30 那么

SELECT    CONVERT(NVARCHAR(7), GeneratedDate, 21) AS Da
          FROM      GET_GeneratedMonth('2013-01-01', '2013-11-30')

得到的结果是


下面是查询A表中的你可以参考一下:

SELECT  A.Date ,
        B.Num
FROM    ( SELECT    CONVERT(NVARCHAR(7), GeneratedDate, 21) AS Date
          FROM      GET_GeneratedMonth('2013-01-01', '2013-11-30')
        ) A
        LEFT JOIN ( SELECT  COUNT(num) AS Num ,
                            CreatedDate
                    FROM    ( SELECT    aphonenum Num ,
                                        CONVERT(NVARCHAR(7), aupload, 21) AS CreatedDate
                              FROM      dbo.Test
                            ) F
                    GROUP BY CreatedDate
                  ) B ON A.Date = B.CreatedDate

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-10
select count(*),month(datetime) from table A group by month(datetime)
忘了是不是month函数 不过数据库肯定有这么个函数可以取出来的
相似回答