求更简略的代码:根据两表之间对应关系,在另一表中生成对应数据
求更简单的代码:根据两表之间对应关系,在另一表中生成对应数据

b1结果<br>
b2<br>[
b1
b1: a、b、c
b2: a、d1、d2、d3
b1表的a字段与b2表中a字段相同,根据b2字段的d1、d2、d3列,a表对应生成一行数据
目前操作如下:
先在b1表中新建f1、f2、f3 字段,类型,字段长度与b2表中的d1、d2、d3相同
use b2 alias b2
scan all
update b1 set f1=b2.d1 where b1.a=b2.a
update b1 set f2=b2.d2 where b1.a=b2.a
update b1 set f3=b2.d3 where b1.a=b2.a
endscan
得到b1表如下
a、b、c、f1、f2、f3
再append from 3次
请问,有无更简便的方式得上述结果了。
------解决方案--------------------
select * from b1 a
inner join
(select c,d1 from b2
union all
select c,d2 from b2
union all
select c,d3 from b2) b
on a.c=b.c
where b.d1 is not null
------解决方案--------------------
select a.*,b.c as newc,d1 from b1 a ;
inner join ;
(select c,d1 from b2;
union all;
select c,d2 from b2;
union all;
select c,d3 from b2) b;
on a.c=b.c;
where b.d1 is not null AND LEN(ALLTRIM(d1))>0 ORDER BY 4
------解决方案--------------------
抄袭版主的,等于学习一遍。
------解决方案--------------------
交叉表?
vfp 已提供了工具代码,直接调用即可
b1结果<br>
b1: a、b、c
b2: a、d1、d2、d3
b1表的a字段与b2表中a字段相同,根据b2字段的d1、d2、d3列,a表对应生成一行数据
目前操作如下:
先在b1表中新建f1、f2、f3 字段,类型,字段长度与b2表中的d1、d2、d3相同
use b2 alias b2
scan all
update b1 set f1=b2.d1 where b1.a=b2.a
update b1 set f2=b2.d2 where b1.a=b2.a
update b1 set f3=b2.d3 where b1.a=b2.a
endscan
得到b1表如下
a、b、c、f1、f2、f3
再append from 3次
请问,有无更简便的方式得上述结果了。
------解决方案--------------------
select * from b1 a
inner join
(select c,d1 from b2
union all
select c,d2 from b2
union all
select c,d3 from b2) b
on a.c=b.c
where b.d1 is not null
------解决方案--------------------
select a.*,b.c as newc,d1 from b1 a ;
inner join ;
(select c,d1 from b2;
union all;
select c,d2 from b2;
union all;
select c,d3 from b2) b;
on a.c=b.c;
where b.d1 is not null AND LEN(ALLTRIM(d1))>0 ORDER BY 4
------解决方案--------------------
CREATE CURSOR B2 (C C(3),D1 C(5),D2 C(6),D3 C(6))
INSERT INTO B2 VALUES([123],[名称1],[名称二],[])
INSERT INTO B2 VALUES([234],[名称1],[],[名称三])
INSERT INTO B2 VALUES([567],[名称1],[名称四],[名称五])
CREATE CURSOR B1 (A C(5),B C(5),C C(3))
INSERT INTO B1 VALUES([信息1],[信息1],[123])
INSERT INTO B1 VALUES([信息1],[信息1],[234])
INSERT INTO B1 VALUES([信息1],[信息1],[567])
SELECT A.*,D1 FROM B1 A ;
LEFT JOIN (SELECT C,D1 FROM B2 UNION ALL SELECT C,D2 FROM B2 UNION ALL ;
SELECT C,D3 FROM B2) B ON A.C==B.C WHERE NOT EMPTY(D1)
抄袭版主的,等于学习一遍。
------解决方案--------------------
交叉表?
vfp 已提供了工具代码,直接调用即可