datFrom="2004-08-01"
datTo="2004-08-17"
strsql="select b.classname,count(a.userid) as countNumb,(count(a.userid)-sum(a.status))as noFeeUser,"& datFrom &" as strFrom,"& datTo &" as strTo from detail a,class b where a.classid=b.classid and a.startDT>='"& datFrom &"' and a.cancelDT<='"& datTo &"' group by a.userid"

解决方案 »

  1.   

    datFrom="2004-08-01"
    datTo="2004-08-17"
    strsql="select b.classname,count(a.userid) as countNumb,(count(a.userid)-sum(a.status))as noFeeUser,'"& datFrom &"' as strFrom,'"& datTo &"' as strTo from detail a,class b where a.classid=b.classid and a.startDT>='"& datFrom &"' and a.cancelDT<='"& datTo &"' group by a.userid"
      

  2.   

    回楼上的 zhangzs8896(小二) 
    开始时间和结束时间是指在操作界面可由用户自行输入起至时间。定制人数 = 欠费用户数 + 正常用户数明细表中有一个字段cancelDT用来记录该用户发生欠费的时间起至时间的意图是:统计一段时间内,各栏目各有多少定阅用户数和欠费用户数
                  和今天比昨天多了多少定阅用户数这样的功能不知这个想法能否实现?谢谢
      

  3.   

    --测试如下--明细表
    create table mx(userID varchar(15),classID varchar(3),startDT datetime,cancelDT datetime,status int)
    insert mx values('98004214','001','2003-07-14','2004-08-10',1)
    insert mx values('98004215','001','2003-08-14','2004-01-10',0)
    insert mx values('98004216','002','2003-08-14','2004-02-10',0)
    insert mx values('98004217','001','2003-04-14','2004-03-10',0)
    insert mx values('98004218','002','2003-05-14','2004-04-10',1)--类别表
    create  table lb(classID varchar(3),className varchar(10))
    insert lb values('001','栏目一')
    insert lb values('002','栏目二')declare @dt datetime
    set @dt='2004-02-17'
    select a.*,b.欠费用户,开始时间=convert(varchar(10),startDT,120),结束时间=convert(varchar(10),b.cancelDT,120)
     from
            (select classID, 定制人数=count(*)
             from mx a
             group by classID)a
             left join    
             (select classID, 欠费用户=count(*),startDT=min(startDT),cancelDT=max(cancelDT)
              from mx
              where status=0 and datediff(day,cancelDT,@dt)>=0
              group by classID
              )b on a.classID=b.classID
    drop table mx,lb--结果
    classID 定制人数        欠费用户        开始时间       结束时间       
    ------- ----------- ----------- ---------- ---------- 
    001     3           1           2003-08-14 2004-01-10
    002     2           1           2003-08-14 2004-02-10
      

  4.   

    忘了点,看看下面的。其实还是没太理解,楼主对照我的数据,和结果,看是不是你需要的。
    --测试如下
    --[给定日期@dt,查询的是到这个时间为止,欠费的人数,最后欠费的日期。] 
    --明细表
    create table mx(userID varchar(15),classID varchar(3),startDT datetime,cancelDT datetime,status int)
    insert mx values('98004214','001','2003-07-14','2004-08-10',1)
    insert mx values('98004215','001','2003-08-14','2004-01-10',0)
    insert mx values('98004216','002','2003-08-14','2004-02-10',0)
    insert mx values('98004217','001','2003-04-14','2004-03-10',0)
    insert mx values('98004218','002','2003-05-14','2004-04-10',1)--类别表
    create  table lb(classID varchar(3),className varchar(10))
    insert lb values('001','栏目一')
    insert lb values('002','栏目二')declare @dt datetime
    set @dt='2004-02-17'
    select distinct 栏目=lb.className,a.定制人数,b.欠费用户,开始时间=convert(varchar(10),b.startDT,120),结束时间=convert(varchar(10),b.cancelDT,120)
    from
            (select classID, 定制人数=count(*)
             from mx a
             group by classID)a
             left join    
             (select classID, 欠费用户=count(*),startDT=min(startDT),cancelDT=max(cancelDT)
              from mx
              where status=0 and datediff(day,cancelDT,@dt)>=0
              group by classID
              )b on a.classID=b.classID
              left join lb on lb.classID=a.classID
             
    order by  栏目 desc 
         
    drop table mx,lb
    --结果栏目         定制人数        欠费用户        开始时间       结束时间       
    ---------- ----------- ----------- ---------- ---------- 
    栏目一        3           1           2003-08-14 2004-01-10
    栏目二        2           1           2003-08-14 2004-02-10