回 帖 发 新 帖 刷新版面

主题:新手求救:求平均值并将数值写入到另一表中

做一个程序,实现以下功能:
  读取 <客户余额表> 中的数据,求出每个账户每月的日平均额(日平均额=1号余额+2号余额+。。。+本月最后一天余额),在 <平均日余额表> 中的对应位置上写入帐户号和对应的每月日平均值。表例如下:
 (1)客户余额表:
账号    日期    余额
.....    ......    ......
10001    20090629    2554
10001    20090630    1254
10001    20090701    1002    
10001    20090702    1524
10001    20090703    5244
......    ......    ......
......    ......    ......
10002    20090629    1278
10002    20090630    5879
10002    20090701    2255
10002    20090702    5761    
......    ......    ......
(2)
账号    1月日均余额    2月日均余额    。。。。    7月日均余额

回复列表 (共4个回复)

沙发

SELECT 帐号,LEFT(日期,6) as 日期 ,余额 FROM 客户余额表 INTO TABLE temp
SELECT 帐号,日期,SUM(余额) as 余额 FROM temp GROUP BY 帐号,日期 INTO CURSOR temp1
scan
    &&逐条填入<平均日余额表> 
endscan

板凳

SELECT 账号,LEFT(日期,6) as 日期,余额 FROM 客户余额表 INTO CURSOR temp0
SELECT 账号,日期 as 日期,sum(余额)/COUNT(余额) as 月日均余额 ;
GROUP BY 账号,日期 FROM temp0 INTO CURSOR temp1
CREATE TABLE 月日均余额(账号 c(8),日均余额1 n(10,2),日均余额2 n(10,2),;
日均余额3 n(10,2),日均余额4 n(10,2),日均余额5 n(10,2),日均余额6 n(10,2),;
日均余额7 n(10,2),日均余额8 n(10,2),日均余额9 n(10,2),日均余额10 n(10,2),;
日均余额11 n(10,2),日均余额12 n(10,2))
SELECT temp1
INDEX on 账号 TO zhsy
GO top
cZH=账号
DO WHILE !EOF()
  INSERT INTO 月日均余额(账号) VALUES(cZH)
  IF 账号=cZH
    FOR nI=1 TO 12
      IF VAL(RIGHT(日期,2))=nI
        cI=ALLTRIM(STR(nI))
        REPLACE 月日均余额.日均余额&cI WITH 月日均余额
        SKIP
      ENDIF
      IF 账号<>cZH
        cZH=账号
        EXIT
      ENDIF 
    NEXT
  ENDIF 
ENDDO

3 楼

cStr="账号"
FOR i=1 TO 12
    cNum=TRANSFORM(i)
    cStr=cStr+","+"SUM(IIF(YEAR(日期)=2009 AND MONTH(日期)=&cNum,余额,0)) AS " + "日均余额&cNum.月"
ENDFOR

SELECT &cStr FROM 客户余额表 GROUP BY 账号 INTO CURSOR tempCursor

SCAN
    SELECT 平均余额表
    LOCATE FOR  ALLTRIM(平均余额表.账号)==ALLTRIM(tempCursor.账号)
    IF FOUND()
        FOR i=1 TO 12
            cNum=TRANSFORM(i)
            REPLACE 日均余额&cNum.月 WITH tempCursor.日均余额&cNum.月
        ENDFOR        
    ENDIF
    SELECT tempCursor
ENDSCAN

4 楼

以下更新“平均余额表”的方法,没有用scan,而是使用了Updata命令。

cStr="账号"
FOR i=1 TO 12
    cNum=TRANSFORM(i)
    cStr=cStr+","+"SUM(IIF(YEAR(日期)=2009 AND MONTH(日期)=&cNum,余额,0)) AS " + "日均余额&cNum.月"
ENDFOR

SELECT &cStr FROM 客户余额表 GROUP BY 账号 INTO CURSOR tempCursor

FOR i=1 TO 12
    cNum=TRANSFORM(i)
    UPDATE 平均余额表 SET 平均余额表.日均余额&cNum.月=tempCursor.日均余额&cNum.月 ;
        FROM tempCursor WHERE  ALLTRIM(平均余额表.账号)==ALLTRIM(tempCursor.账号)
ENDFOR

我来回复

您尚未登录,请登录后再回复。点此登录或注册