回 帖 发 新 帖 刷新版面

主题: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个回复)

11 楼

本人软件中类似楼主的多表合并之事很多,因而对多表合并整理也着实研究了很多,象楼主这样的问题、按楼上所讲的位置,再往下我还要用三个语句才能完成。听到cb1518老师一个语句就能完成,甚是惊喜,如能学到,既长了知识,又长了见识。

12 楼

[quote]本人到是能用3个语句完成,cbl518老师提出一条命令完成,因而就不敢献丑,只有静观了。
[/quote]

严厉批评你这种态度!

想不到作为老前辈,还存在这种不成熟的心理!

不过,3条命令真的非常厉害了!可否明示? 三人行,必有我师焉!

13 楼

[quote][quote]本人到是能用3个语句完成,cbl518老师提出一条命令完成,因而就不敢献丑,只有静观了。
[/quote]
老兄:
你好!
    个人有个人的编程手法和习惯!代码多少,并不是证明什么。关键是编程运行的稳定性和效率。我之所以提出这个问题,是为了提示大家用查询的方法,解决此类历游多表数据的运算问题!尽量每个表运算一次就能达到需要结果目的。大家拿方案,大家学习,大家进步!对吗???[/quote]

对!虽然每个人都有水平之分,但每个人都会有自己的长处,每个人都有别人能学习的地方,再强的科学家也要看看别人的理论!

14 楼

为了方便网友试验,我替楼主将,建表代码写出来:
CREATE TABLE c:\temp\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 c:\temp\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 c:\temp\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
*以下就可测试查询语句了:

15 楼

各位大虾:

就不要再折磨小弟了,先请种子兄,给出你那三句语句好吗?

16 楼

呵呵,琅拿度朋友,俺来给答案:

要求:你必须是VFP9.0才行,它支持from后的子查询

select temp.C_id, temp.C_ys, count(temp.N_val) as N_val from (select * from a1 union all select * from b1 union all select * from c1) as temp group by C_id into table d1

如果是9以前的版本,可以分成两步:
select * from a1 union all select * from b1 union all select * from c1 into cursor temp
select C_id, C_ys, count(N_val) as N_val from temp  group by C_id into table d1

17 楼

Ilikefox 老师:
高手!!!
子查询的理解和运用相当精练。

18 楼

我觉得你应该把颜色表单独出来,这样颜色的数据就不会重复了。
Color.dbf
1 黑
2 蓝
3 黄
4 白
5 紫
6 红
7 红(?)

(纯属探讨)
合并:
Select X.编号,X.颜色,A.数量+B.数量+C.数量 as 数量 ;
From Color.dbf as X , A , B , C ;
Where X.编号=A.编号 and X.编号=B.编号 and X.编号=C.编号 ;
Into cursor D

19 楼

[quote]我觉得你应该把颜色表单独出来,这样颜色的数据就不会重复了。
Color.dbf
1 黑
2 蓝
3 黄
4 白
5 紫
6 红
7 红(?)

(纯属探讨)
合并:
Select X.编号,X.颜色,A.数量+B.数量+C.数量 as 数量 ;
From Color.dbf as X , A , B , C ;
Where X.编号=A.编号 and X.编号=B.编号 and X.编号=C.编号 ;
Into cursor D
[/quote]
具体情况有具体的要求,所以这里说的只是一个例子,描述不一定上一颜色。

20 楼

[quote]呵呵,琅拿度朋友,俺来给答案:

要求:你必须是VFP9.0才行,它支持from后的子查询

select temp.C_id, temp.C_ys, count(temp.N_val) as N_val from (select * from a1 union all select * from b1 union all select * from c1) as temp group by C_id into table d1

如果是9以前的版本,可以分成两步:
select * from a1 union all select * from b1 union all select * from c1 into cursor temp
select C_id, C_ys, count(N_val) as N_val from temp  group by C_id into table d1[/quote]

受益匪浅,请老师分析求反。

我来回复

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