回 帖 发 新 帖 刷新版面

主题:3个自由表,如何相加为一个新表?和反过程。

有三个表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 楼

如果我没理解错题意的话,就是A、B、C表已经合并为D表并已经打开,如果是我再往下我会这样写,不知是否符合题意?

SORT TO LSB ON 编号C
USE LSB
TOTA TO D ON 编号C FIEL 数量N &&这里的D是指题上说的D表,但一个字符做表名本人没用过。

22 楼

本人将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 楼

老兄:
注意:
以上语句是求三个字段的条数,不符合题意(楼主是求三个字段和),因改为:
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 楼

cbl518弟:十一好!
    你的修正我领会了,感谢。
    还有几个问题再请教一下:
    1、A1、B1、C1三个表操作前是不是要先打开?操作后是否需要关闭?是否可只操作一个表?
    2、本人的软件运行开始有一个本软件的环境设置,SET ENGINEBEHAVIOR 70
是不是应该写在环境设置中?
    3、你写的SET ENGINEBEHAVIOR 70和赵老师写的SELECT DBF_表01.C_ID......都是SQL语句吧?

25 楼

本人21楼中的三个语句原来自我感觉良好,与cb1518和Ilikefox二位老师的比起来就显得十分笨拙了。

26 楼

[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 楼

老弟:节日快乐!
    现在操作的是A1、B1、C1三个表吗,是否可以只操作一个表呀?

28 楼

[quote]老弟:节日快乐!
    现在操作的是A1、B1、C1三个表吗,是否可以只操作一个表呀?
[/quote]
可以只操作一个表。
参考 26 楼说明。

29 楼

08号明白,谢谢cb1518弟!

30 楼

诸位,乌鸦又掉进井里了。

我来回复

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