| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 545 人关注过本帖
标题:新手求教---父表的总金额=子表金额的累加怎么实现?谢谢!
只看楼主 加入收藏
szluonia
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-4-7
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
新手求教---父表的总金额=子表金额的累加怎么实现?谢谢!
新手求教---父表的总金额=子表金额的累加怎么实现?谢谢!
2013-04-07 12:11
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
收藏
得分:10 
update 父表 set 总金额=b.子表金额 from (select 连接字段,sum(子表金额) 子表金额 from 子表 group by 连接字段) b where 父表.连接字段==b.连接字段
2013-04-07 12:17
lygcw9603
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:233
专家分:357
注 册:2006-8-27
收藏
得分:10 
update 父表 set 总金额=b.子表金额 from (select 连接字段,sum(子表金额) 子表金额 from 子表 group by 连接字段) b where ALLTRIM(父表.连接字段)==ALLTRIM(b.连接字段) &&加ALLTRIM()保证万无一失,防止两个表中的 连接字段 宽度不一样

或者直接由子表生成汇总表

select 连接字段,sum(子表金额) 子表金额 from 子表 group by 连接字段 INTO CURSOR TMP

[ 本帖最后由 lygcw9603 于 2013-4-7 13:11 编辑 ]
2013-04-07 13:07
lygcw9603
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:233
专家分:357
注 册:2006-8-27
收藏
得分:0 
楼主没必要专门建一个父表,只要有原始数据表,可以根据自己的需要,通过各种方法生成一个临时表,来达到自己的目的。
在硬盘上专门建立一个数据表,是要占用硬盘的容量的。
2013-04-07 13:34
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
收藏
得分:0 
"where ALLTRIM(父表.连接字段)==ALLTRIM(b.连接字段) &&加ALLTRIM()保证万无一失,防止两个表中的 连接字段 宽度不一样"

如果不是VARCHAR类型的字符字段 ,就不需要加 这个ALLTRIM(),因 VFP SQL 字符字段比较,后空格多少是不会影比较的结果的, 如果是两字符字段比较,不加上ALLTRIM()还有一个好处,字段1=字段2 和 字段1==字段2 结果是一样的。但如果加上ALLTRIM(),ALLTRIM(字段1)=ALLTRIM(字段2) 和 ALLTRIM(字段1)==ALLTRIM(字段2) 就有可能不一样了.

如 表1 字段1
        A1
        B1

 表2 字段2
        A1
        B1
        B

SELECT 字段1,字段2 FROM 表1 A,表2 B WHERE A.字段1=B.字段2
SELECT 字段1,字段2 FROM 表1 A,表2 B WHERE A.字段1==B.字段2
SELECT 字段1,字段2 FROM 表1 A,表2 B WHERE allt(A.字段1)==allt(B.字段2)
以上的查询结果一样
 字段1  字段2
  A1     A1
  B1     B1

但如果是
SELECT 字段1,字段2 FROM 表1 A,表2 B WHERE allt(字段1)=allt(字段2)
查询结果就不一样了
 字段1  字段2
  A1     A1
  B1     B1
  B1     B

你们试试看。
注意:如是VARCHAR类型的字段。就不是这样,因为这类型的字段后可没空格的,而其它 如character类型的,其后自动填充了空格才有这样的效果.


[ 本帖最后由 kiff 于 2013-4-8 14:20 编辑 ]
2013-04-08 13:33
lygcw9603
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:233
专家分:357
注 册:2006-8-27
收藏
得分:0 
对字符串使用 = 操作符时,所得结果与 SET ANSI 的设置有关。当 SET ANSI 设置为 OFF 时, Visual FoxPro 比较字符串的方式与 Xbase 的用户相同。当 SET ANSI 的设置为 ON 时, Visual FoxPro 比较字符串时遵守 ANSI 标准。有关 Visual FoxPro 字符比较方法的详细内容,请参阅 SET ANSI 和 SET EXACT。
程序代码:
这是VFP6帮助文件中关于SELECT-SQL命令中的一段说明
SET ANSI ON
CREATE CURSOR TA (ID C(5),F C(2))
INSERT INTO TA VALUES ([A01],[AA])
INSERT INTO TA VALUES ([2],[BB])
CREATE CURSOR TB (ID C(10),F C(2))
INSERT INTO TB VALUES ([A01    ],[AA])
INSERT INTO TB VALUES ([2],[BB])

SELECT A.*,B.* FROM TA A,TB B WHERE A.ID=B.ID
SELECT A.*,B.* FROM TA A,TB B WHERE ALLTRIM(A.ID)==ALLTRIM(B.ID)
SELECT A.*,B.* FROM TA A,TB B WHERE A.ID==B.ID
经验证,SET ANSI 命令对SELECT-SQL 命令是没有影响的;上述代码中加(或不加)SET ANSI 命令,最后结果是一样的,同时验证了5楼的结论是正确的。不知我的理解是否正确
2013-04-08 14:43
快速回复:新手求教---父表的总金额=子表金额的累加怎么实现?谢谢!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029580 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved