主题:新手求救:求平均值并将数值写入到另一表中
天资愚钝
[专家分:0] 发布于 2009-07-31 20:28:00
做一个程序,实现以下功能:
读取 <客户余额表> 中的数据,求出每个账户每月的日平均额(日平均额=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个回复)
沙发
fyyylyl [专家分:8550] 发布于 2009-08-01 08:36:00
SELECT 帐号,LEFT(日期,6) as 日期 ,余额 FROM 客户余额表 INTO TABLE temp
SELECT 帐号,日期,SUM(余额) as 余额 FROM temp GROUP BY 帐号,日期 INTO CURSOR temp1
scan
&&逐条填入<平均日余额表>
endscan
板凳
sywzs [专家分:5650] 发布于 2009-08-01 12:14:00
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 楼
zxl931 [专家分:3420] 发布于 2009-08-01 13:55:00
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 楼
zxl931 [专家分:3420] 发布于 2009-08-01 14:27:00
以下更新“平均余额表”的方法,没有用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
我来回复