注册 登录
编程论坛 VFP论坛

俺又厚着脸皮来求助了:如何把字符型字段内数字相加?如何按条件计算总和?

yilance 发布于 2021-05-18 19:42, 2799 次点击
俺又厚着脸皮来求助了,之前发的贴子,很多网友都来帮助我
尤其我们的两位热心的版主(sdta和吹水佬),非常感谢!现在又碰到新的问题,自己又是查书又是查资料,还是没捯饬出来
实在没办法,又来求助大家了(唉,才疏学浅,以后得好好看看书,多学习!)

1、我有一张欠费表,表中有欠费字段是字段是字符型的记录,比如
   
   学生         欠费           欠费金额
   刘心          1200+660
   李经          1800+660
   胡课          660+525

我想把欠费这栏里的数字加起来,这样就好知道学生的欠费金额了,然后放到欠费金额 这个空白的数值型字段里

2、另一张表想按要求统计出相加
 sdta版主教我的码这是么写的:
SELECT 入学年,收费项目,毕业与否, SUM(欠费) lj FROM 欠费表 GROUP BY 入学年,收费项目,毕业与否

可是我还想再加一栏人数的计算,不知道如何塞代码了

sum(欠费,人数)?
sum(欠费),sum(人数)?
都不对
21 回复
#2
吹水佬2021-05-18 21:04
1、用EVALUATE()
CREATE CURSOR tt (学生 C(10), 欠费 C(10),欠费金额 I)
INSERT INTO tt VALUES ("刘心","1200+660",0)
INSERT INTO tt VALUES ("李经","1800+660",0)
INSERT INTO tt VALUES ("胡课","660+525",0)
REPLACE ALL 欠费金额 WITH EVALUATE(欠费)
BROWSE
#3
吹水佬2021-05-18 21:06
2、都写出来了,对不对试运行就知道
#4
radiofan2021-05-18 21:11
以下是引用吹水佬在2021-5-18 21:06:31的发言:

2、都写出来了,对不对试运行就知道


吹版真是个热心人
#5
yilance2021-05-18 21:51
回复 2楼 吹水佬
谢谢,谢谢!
但是这样的语句是不是仅仅使用于记录比较少的情况
我的表里有2万多的记录
还有,可爱的热心的吹水佬版主,可否好人做到底
帮我也看看第2条的计算如何更改一下呢


[此贴子已经被作者于2021-5-18 21:54编辑过]

#6
yilance2021-05-18 21:55
回复 4楼 radiofan
这倒是的,第一时间回复,不辞辛苦的敲代码,的确得大大的赞赞赞!
#7
yilance2021-05-18 22:08
回复 3楼 吹水佬
哦,刚看到第二条原来回复在这呢
听你这么说,我再来试试看
不对再来骚扰您啦
#8
吹水佬2021-05-18 22:08
回复 5楼 yilance
1、觉得这样的语句是适用于记录比较多的情况,有2万多的记录,试试扩大100倍,2百万的记录。
2、无数据怎样帮看看第2条的计算?
#9
yilance2021-05-18 22:19
以下是引用吹水佬在2021-5-18 21:06:31的发言:

2、都写出来了,对不对试运行就知道

哈哈哈
得到您的肯定我就大胆的试了
咋这次就可以了呢,哈哈哈,太高兴了!瞎猫碰到死耗子啦~~~哇卡卡~~
捯饬一下午,查来查去的,也没搞好
原来下午试的时候少加个,号了,加上后就计算自如啦

代码就是这样的:
SELECT 入学年,收费项目,毕业与否, SUM(学费),SUM(人数)lj FROM 欠费 GROUP BY 入学年,收费项目,毕业与否


谢谢!

[此贴子已经被作者于2021-5-18 22:20编辑过]

#10
yilance2021-05-18 22:43
回复 8楼 吹水佬
亲爱的吹水佬版主:
捯饬了好一会,也还是没明白您的这个程序(请严重原谅我如此的菜菜)
我的理解是
如果还有别的记录是不是
CREATE CURSOR tt (学生 C(10), 欠费 C(10),欠费金额 I)
INSERT INTO tt VALUES ("刘心","1200+660",0)
INSERT INTO tt VALUES ("李经","1800+660",0)
INSERT INTO tt VALUES ("胡课","660+525",0)
INSERT INTO tt VALUES ("aa","700+525",0)
INSERT INTO tt VALUES ("bb","800+525",0)
INSERT INTO tt VALUES ("cc","900+525",0)
.......
.......
REPLACE ALL 欠费金额 WITH EVALUATE(欠费)
BROWSE


INSERT INTO tt VALUES ("cc","900+525",0)  这条语句要不停的写?
所以我说是不是适合记录比较少的


还有啊,您写的这些的语句是需要在命令窗口一条一条的写了再运行的吗?

[此贴子已经被作者于2021-5-18 22:50编辑过]

#11
吹水佬2021-05-19 04:39
回复 10楼 yilance
你提供数据表文件就不用我写这些代码了。
命令窗口极少用了,通常在关闭状态。
#12
mywisdom882021-05-19 08:35
回复 楼主 yilance
命令窗口,一般不能运行多条命令的,需要运行多条命令,一般把N条命令保存到1个文件去,刚好VFP中,就有这种文件 .prg
怎么运行 .prg文件呢,这样。。。
DO c:\xxxyyyyy\程序1.prg
#13
yilance2021-05-19 10:12
回复 11楼 吹水佬
只有本站会员才能查看附件,请 登录

好的,己经上传了,您看看?

我是用笨方法,因为欠费的金额种数是固定的,不会超过20个
我是一条一条地在命令窗口写上   repl all 欠费金额 for 欠费=‘***’ 
先把欠费金额调成字符型,完了然后再换成数值型

如果情况比较多,我就束手无策了
#14
yilance2021-05-19 10:14
回复 12楼 mywisdom88
多谢指导!
程序不会写啊
说起来都非常不好意思
我也有程序,都像这样抄来的,惭愧惭愧!
#15
吹水佬2021-05-19 10:53
以下是引用yilance在2021-5-19 10:12:58的发言:

我是一条一条地在命令窗口写上   repl all 欠费金额 for 欠费=‘***’ 

提供的欠费表没有“欠费金额”字段
repl all 欠费金额 for ????????

只有本站会员才能查看附件,请 登录

SELECT xh,xm,xb,欠费,IIF(!EMPTY(欠费),EVALUATE(欠费),000000) 欠费金额 FROM 欠费表 WHERE !EMPTY(欠费)
#16
yilance2021-05-19 15:45
回复 15楼 吹水佬
亲爱的版主:
您的这个语句去试了一下,非常好用
但是对于我来说差一点的地方是又建了一张新的临时表
我想就在原表中加一列“欠费金额”,(刚刚附上更改后的表,可否再帮我测试一下?)
您第一次写的语句我各种套用,照葫芦画瓢地修改,仍然不会
(请重点原谅俺的需求甚多
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2021-5-19 15:55编辑过]

#17
吹水佬2021-05-19 16:10
回复 16楼 yilance
USE 欠费表
REPLACE ALL 欠费金额 WITH IIF(!EMPTY(欠费),EVALUATE(欠费),0)
SELECT xh,xm,xb,欠费,欠费金额 FROM 欠费表 WHERE 欠费金额!=0
#18
yilance2021-05-19 16:58
回复 17楼 吹水佬
使用了,完美!
版主太帅了
#19
yilance2021-05-19 17:03
回复 17楼 吹水佬
估计您心里说:唉,这个菜的,要手把手的教[em02]
#20
吹水佬2021-05-20 04:21
回复 19楼 yilance
估计是从其他类型文件获取的数据
+1320+660,类似这样的数据,获取时就可以直接用
1320+660+...累加,不用到现在多此一举。
#21
yilance2021-05-21 15:05
回复 20楼 吹水佬
听您这么说
是这样
根本不用这么麻烦的
主要我以前不会分类相加
现在来捯饬试试
谢谢!
#22
yilance2021-05-21 15:49
回复 20楼 吹水佬
哎呀,太感谢您了!
真是一语惊醒梦中人
我的表是这样的

学号      姓名   欠费    缴费项目
2018020336  刘晓   1320    2019年春
2018020336  刘晓   1320    2020年春
2018020336  刘晓   1320    2021年春
2018020337  田田   1320    2019年春
2018020337  田田   1320    2020年春
2018020337  田田   1320    2021年春

我要得到一张每个学生欠费金额的表
都是用笨方法搞成 2018020336  刘晓   1320+1320+1320  的表,

然后再得到 2018020336  刘晓   3960 这样的表

不过主要得益于刚刚学会的用sum进行分类计算

[此贴子已经被作者于2021-5-21 16:18编辑过]

1