主题:3个自由表,如何相加为一个新表?和反过程。
琅拿度
[专家分:2820] 发布于 2007-09-28 17:32:00
有三个表A、B、C,结构都一样(编号C,描述C,数量N)
要求把合并为结构一样的 D,编号不能重复,描述不变,编号重复的数量相加即可。
A 记录为:
1 黑 1
4 白 1
7 红 1
B 记录为:
1 黑 1
3 黄 1
5 紫 1
C 记录为:
2 蓝 1
4 白 1
6 红 1
如果有了D,要减掉A呢?又该如何?
回复列表 (共43个回复)
21 楼
北京种子乐 [专家分:3710] 发布于 2007-09-30 19:48:00
如果我没理解错题意的话,就是A、B、C表已经合并为D表并已经打开,如果是我再往下我会这样写,不知是否符合题意?
SORT TO LSB ON 编号C
USE LSB
TOTA TO D ON 编号C FIEL 数量N &&这里的D是指题上说的D表,但一个字符做表名本人没用过。
22 楼
北京种子乐 [专家分:3710] 发布于 2007-10-01 06:22:00
本人将cb1518和Ilikefox二位老师的代码合成一个.PRG文件,测试结果出现奇迹,与cb1518老师预测的完全一样。
真是既学到了知识,又长了见识。
忠心感谢cb1518和Ilikefox二位老师,感谢楼主提出这个问题,感谢网主!
下面是本人合成的代码:
* 为了方便网友试验,我替楼主将,建表代码写出来:
CREATE TABLE \YRML\DBF_表01\A1.DBF(C_ID C(2),C_YS C(2),N_VAL N(2))
INSERT INTO A1 VALUES ("1", "黑", 1)
INSERT INTO A1 VALUES ("4", "白", 1)
INSERT INTO A1 VALUES ("7", "红", 1)
CREATE TABLE \YRML\DBF_表01\B1.DBF(C_ID C(2),C_YS C(2),N_VAL N(2))
INSERT INTO B1 VALUES ("1", "黑", 1)
INSERT INTO B1 VALUES ("3", "黄", 1)
INSERT INTO B1 VALUES ("5", "紫", 1)
CREATE TABLE \YRML\DBF_表01\C1.DBF(C_ID C(2),C_YS C(2),N_VAL N(2))
INSERT INTO C1 VALUES ("2", "蓝", 1)
INSERT INTO C1 VALUES ("4", "白", 1)
INSERT INTO C1 VALUES ("6", "红", 1)
* 设置 vfp 9 兼容 70。
SET ENGINEBEHAVIOR 70
* 以下就可测试查询语句了:
SELECT DBF_表01.C_ID, DBF_表01.C_YS, COUNT(DBF_表01.N_VAL) AS N_VAL FROM (SELECT * FROM A1 UNION ALL SELECT * FROM B1 UNION ALL SELECT * FROM C1) AS DBF_表01 GROUP BY C_ID INTO TABLE D1
LIST
23 楼
cbl518 [专家分:57140] 发布于 2007-10-01 07:54:00
老兄:
注意:
以上语句是求三个字段的条数,不符合题意(楼主是求三个字段和),因改为:
SELECT DBF_表01.C_ID, DBF_表01.C_YS, [color=FF0000]SUM[/color](DBF_表01.N_VAL) AS N_VAL FROM (SELECT * FROM A1 UNION ALL SELECT * FROM B1 UNION ALL SELECT * FROM C1) AS DBF_表01 GROUP BY C_ID INTO TABLE D1
24 楼
北京种子乐 [专家分:3710] 发布于 2007-10-01 08:30:00
cbl518弟:十一好!
你的修正我领会了,感谢。
还有几个问题再请教一下:
1、A1、B1、C1三个表操作前是不是要先打开?操作后是否需要关闭?是否可只操作一个表?
2、本人的软件运行开始有一个本软件的环境设置,SET ENGINEBEHAVIOR 70
是不是应该写在环境设置中?
3、你写的SET ENGINEBEHAVIOR 70和赵老师写的SELECT DBF_表01.C_ID......都是SQL语句吧?
25 楼
北京种子乐 [专家分:3710] 发布于 2007-10-01 08:39:00
本人21楼中的三个语句原来自我感觉良好,与cb1518和Ilikefox二位老师的比起来就显得十分笨拙了。
26 楼
cbl518 [专家分:57140] 发布于 2007-10-01 08:43:00
[quote]cbl518弟:十一好!
你的修正我领会了,感谢。
还有几个问题再请教一下:
1、A1、B1、C1三个表操作前是不是要先打开?操作后是否需要关闭?是否可只操作一个表?
2、本人的软件中运行开始有一个本软件的环境设置,SET ENGINEBEHAVIOR 70
是不是应该写在环境设置中?
3、你写的SET ENGINEBEHAVIOR 70和赵老师写的SELECT DBF_表01.C_ID......都不得是SQL语句吧?
[/quote]
老兄:
节日快乐!
1、A1、B1、C1三个表操作不用先打开。
操作后,将不再使用的表关闭关闭?
是否可只操作一个表?(不明白你的意思)
2、SET ENGINEBEHAVIOR 70 (确定 SQL 数据引擎兼容为 70)可以写在环境设置中。
3、SELECT DBF_表01.C_ID...... 就是 SQL 多层嵌套查询语句。实际上就是多个SELECT语句的组合。
以上的语句,和3楼的 user886633老师的原理是一样的。
但在大数据表操作,从速度、稳定性、灵活性方面来讲,不如user886633老师的方案。
因为 SQL 语句其通用性比较广,所以从单一功能来讲,不如专业性的语句。
27 楼
北京种子乐 [专家分:3710] 发布于 2007-10-01 08:50:00
老弟:节日快乐!
现在操作的是A1、B1、C1三个表吗,是否可以只操作一个表呀?
28 楼
cbl518 [专家分:57140] 发布于 2007-10-01 08:59:00
[quote]老弟:节日快乐!
现在操作的是A1、B1、C1三个表吗,是否可以只操作一个表呀?
[/quote]
可以只操作一个表。
参考 26 楼说明。
29 楼
北京种子乐 [专家分:3710] 发布于 2007-10-01 09:12:00
08号明白,谢谢cb1518弟!
30 楼
0901chang [专家分:10660] 发布于 2007-10-01 09:19:00
诸位,乌鸦又掉进井里了。
我来回复