一个累计功能的实现
大家好!
我在做一个asp的CRM数据库的时候,要用到将每月的订货日累积的功能,代码如下:
- VBScript code
dim nianyue, m, k, a(120),y,temp,temp1,dinghuok=0a(0)="2012-4-0"flag=0SQLStr="SELECT 订货日 FROM 表1 WHERE 订货日 >= #2012-4-1# ORDER BY 订货日 ASC"Set rs3=Server.CreateObject("ADODB.Recordset")Set rs3=conn.execute(SQLStr)'response.Write(rs3(0))While NOT rs3.EOF IF NOT ISNULL(rs3("订货日")) THEN nianyue=YEAR(rs3("订货日"))& "-" & MONTH(rs3("订货日")) 'response.write(nianyue) & "<br>" FOR m=0 TO k temp=SPLIT(a(m),"-") IF temp(0) & "-" & temp(1) = nianyue THEN temp1=SPLIT(a(m),"-") a(m)=temp1(2) a(m)=a(m)+1 a(m)= nianyue & "-" & a(m) 'response.Write(a(m)) & "<br>" flag = 1 ' 找到了以前数组上有相同的月份 EXIT FOR end if NEXT '这个是新的月份,在以前的数组里没有找到过 if flag <> 1 then a(k+1)=1 a(k+1)=nianyue & "-" & a(k+1) 'response.write(a(k+1)) & "<br>" k=k+1 'response.Write("k=" & k) & "<BR>" end if END IF flag=0 rs3.movenextWENDdinghuo=0for y=0 to k temp=split(a(y),"-") dinghuo=dinghuo+temp(2)next a(120)是设了一个120的数组,算它一年12个月,可以显示10年的记录。a(0)是初始值,设为今年的4月份开始,当然也可以设的以前的值,SQL语句也是从四月份开始。
我这样做,基本能够达到效果,但觉得一定还有更好的办法,比如不需要设初始值,变量也不用设的这么多!
请大家看看有没有更好的代码可以实现同样的效果,甚至是只用SQL就可以了~~~
[解决办法]
楼主,这不是一个普通的sql 的group by吗
假设你的极端简化了的订单表是 orders,包含 cnt 数量,和orderdate 日期两个字段,你按月统计,
就是
select sum(cnt),year(orderdate),month(orderdate) from orders
group by year(orderdae), month(orderdate)
统计的结果就是这样
150 2011 11
160 2011 12
170 2012 1 ......
如果想指定日期就是 ...from orders where orderdate>'2011-4-5' group by ...