日期:2014-05-17  浏览次数:20762 次

一个累计功能的实现
大家好!
我在做一个asp的CRM数据库的时候,要用到将每月的订货日累积的功能,代码如下:
VBScript code

dim nianyue, m, k, a(120),y,temp,temp1,dinghuo
k=0
a(0)="2012-4-0"
flag=0

SQLStr="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.movenext
WEND
dinghuo=0
for 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 ...