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"
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"
解决方案 »
- reporting service 2005, 矩阵报表里如何显示列名称.
- sql小问题(字符串连接)
- 如何定位字符串中第一个汉字并从该汉字处截成两个字符串?
- 希望广大SQL高手来帮你探讨一下这条SQL语句。探讨完毕就结贴。谢!
- 问一个非常基础的问题,sql server 2000不能在linux下使用吗??那么在linux下用什么数据库啊??
- 诸位大虾帮忙看一下我这是哪错了??在线等!!
- 2005在现有数据表中分区
- 关于死锁的问题!(在线等待)
- 【在线等,速结贴】SQL 怎样在原表将一条数据根据数量字段拆分成同等数量一条一条的数据
- sql 累计求和
- 各位帮忙.怎么样把ACCESS数据库转入到MS-SQL Server上呢..?多谢各位!
- 关于触发器
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"
开始时间和结束时间是指在操作界面可由用户自行输入起至时间。定制人数 = 欠费用户数 + 正常用户数明细表中有一个字段cancelDT用来记录该用户发生欠费的时间起至时间的意图是:统计一段时间内,各栏目各有多少定阅用户数和欠费用户数
和今天比昨天多了多少定阅用户数这样的功能不知这个想法能否实现?谢谢
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
--测试如下
--[给定日期@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