如何一表中字段的所有值复制到另一表中对应的字段下?

时间:2021-03-19 15:31:35
表A:
年限   姓名      工号     社保号
1     王峭       0138    0126982    
2     王峭       0138    012598
3     王峭       0138    012598
3     李虎       0125    035789
2     李虎       0125    035789
表B:
姓名       工号     2011年   2012年   2013年    社保号
王峭       0138      1       2       3        0126982*  
李虎      0125              2       3        035789
如何把表A的内容有条件的复制入表B,表B只有文件结构。由于王峭的社保号不同,故用“*”做标记
 

25 个解决方案

#1


有条件的复制,条件是什么

#2


就是A表中李虎年限中没有1(即B表中2011年),在转到B表后显示空值

#3


Create Cursor Tt (年限 N(1),姓名 C(6),工号 C(4),社保号 C(10))
Insert Into Tt Values (1,"王峭","0138","0126982")
Insert Into Tt Values (2,"王峭","0138","0126982")
Insert Into Tt Values (3,"王峭","0138","0126982")
Insert Into Tt Values (2,"李虎","0125","035789")
Insert Into Tt Values (3,"李虎","0125","035789")
Select 姓名,;
Sum(Iif(年限=1,年限,0)) Y2011,;
Sum(Iif(年限=2,年限,0)) Y2012,;
Sum(Iif(年限=3,年限,0)) Y2013  From Tt Group By 姓名

#4


Select 姓名,;
Sum(Iif(年限=1,年限,0)) Y2011,;
Sum(Iif(年限=2,年限,0)) Y2012,;
Sum(Iif(年限=3,年限,0)) Y2013,社保号 From Tt Group By 姓名,社保号

#5


楼上,表A有千条记录,方法行不通吧?

#6


年限字段共有多少种可能的值?现在只看到 3 种

#7


年限字段至多有5个可能的值(2,3,4,5,6),即同一姓名下对应至多5个值,个别的姓名对应的至少有1个值 

#8


数据表转置,单用 Sql 语句的话,基本就只有4楼给出的方法了,稍改一下

Insert into 表B (姓名, 工号, 社保号, _2011, _2012, ..., _2016 ) ;
Select 姓名, 工号, Max(社保号), ;
    Iif(年限 == 1, 年限, 0), ;
    Iif(年限 == 2, 年限, 0), ;
    ...
    Iif(年限 == 6, 年限, 0) ;
From 表A ;
Group by 姓名, 工号

#9


这个是在VF中怎么操作?新建 一程序后加入以上代码,提示select 处语法错误

#10


引用 9 楼 cfjly 的回复:
新建 一程序后加入以上代码,提示select 处语法错误

中间的 ... 你要根据实际的字段个数填完整了
或者截图上来

#11


如何一表中字段的所有值复制到另一表中对应的字段下?

#12


p0401是表B,0401是表A

#13


你这是 vfp6 吧
抱歉,我只用 vfp9,vfp6 不清楚

#14


如何一表中字段的所有值复制到另一表中对应的字段下?如何一表中字段的所有值复制到另一表中对应的字段下?
用VF9测试了,还出现以下错误?

#15


本帖最后由 dkfdtf 于 2014-11-04 15:27:13 编辑
最后一个 Iif 后面多了一个逗号
另外, Select 的字段数比 Insert 需要的字段数多出了一个 dwdm

#16


如何一表中字段的所有值复制到另一表中对应的字段下?
select的字段里去了DWDM后,显示GROUPY by语句缺少 

#17


是全去掉DWDM后提示GROUPBY 语句缺少,只去掉Select后的DWDM,提示找不到变量 DWDM

#18


不知道你前几个字段代表的是什么,从字段名对应关系上来看,应该是这样:
Insert into f:\zz\p0401.dbf (xm, dwdm, sfzh, 初一下, 初二上, 初二下初, 初二下末, 初三上) ;
Select xm, dwdm,sfzh, ;
Iif(id == 2, id, 0), ;
Iif(id == 3, id, 0), ;
Iif(id == 4, id, 0), ;
Iif(id == 5, id, 0), ;
Iif(id == 6, id, 0) ;
from f:\zz\0401.dbf ;
group by xm, dwdm, sfzh

#19


dwdm是学校代号四位数 字符型,sfzh是身份证号,xm是姓名
总提示 找不到变量DWDM

#20


id=2代表初一,依次类推

#21


检查 p0401.dbf 和 0401.dbf 中是否都存在 dwdm 字段

#22


都存在,就是提示子句group 缺少

#23


先执行一句
Set EngineBehavior 70

#24


楼上正解,这句作用是什么?
程序运行后为什么id年限都全,比如
李好   id 1  2  3  4  5  6 
转置后目标表显示的字段:只显示
李好   0  0   0  0  0   6
但是明明李好其他年级在原表中都有ID呀,转后怎么只显示最后一个学期!

#25


本帖最后由 dkfdtf 于 2014-11-04 17:31:43 编辑
要上面的结果,需要 sum 操作,这样:
Insert into f:\zz\p0401.dbf (xm, dwdm, sfzh, 初一下, 初二上, 初二下初, 初二下末, 初三上) ;
Select xm, dwdm,sfzh, ;
sum(Iif(id == 2, id, 0)), ;
sum(Iif(id == 3, id, 0)), ;
sum(Iif(id == 4, id, 0)), ;
sum(Iif(id == 5, id, 0)), ;
sum(Iif(id == 6, id, 0)), ;
from f:\zz\0401.dbf ;
group by xm, dwdm, sfzh
这样也就不需要 Set EngineBehavior 70 了,因为这条语句已经符合 vfp9 sql 语法规范了

#1


有条件的复制,条件是什么

#2


就是A表中李虎年限中没有1(即B表中2011年),在转到B表后显示空值

#3


Create Cursor Tt (年限 N(1),姓名 C(6),工号 C(4),社保号 C(10))
Insert Into Tt Values (1,"王峭","0138","0126982")
Insert Into Tt Values (2,"王峭","0138","0126982")
Insert Into Tt Values (3,"王峭","0138","0126982")
Insert Into Tt Values (2,"李虎","0125","035789")
Insert Into Tt Values (3,"李虎","0125","035789")
Select 姓名,;
Sum(Iif(年限=1,年限,0)) Y2011,;
Sum(Iif(年限=2,年限,0)) Y2012,;
Sum(Iif(年限=3,年限,0)) Y2013  From Tt Group By 姓名

#4


Select 姓名,;
Sum(Iif(年限=1,年限,0)) Y2011,;
Sum(Iif(年限=2,年限,0)) Y2012,;
Sum(Iif(年限=3,年限,0)) Y2013,社保号 From Tt Group By 姓名,社保号

#5


楼上,表A有千条记录,方法行不通吧?

#6


年限字段共有多少种可能的值?现在只看到 3 种

#7


年限字段至多有5个可能的值(2,3,4,5,6),即同一姓名下对应至多5个值,个别的姓名对应的至少有1个值 

#8


数据表转置,单用 Sql 语句的话,基本就只有4楼给出的方法了,稍改一下

Insert into 表B (姓名, 工号, 社保号, _2011, _2012, ..., _2016 ) ;
Select 姓名, 工号, Max(社保号), ;
    Iif(年限 == 1, 年限, 0), ;
    Iif(年限 == 2, 年限, 0), ;
    ...
    Iif(年限 == 6, 年限, 0) ;
From 表A ;
Group by 姓名, 工号

#9


这个是在VF中怎么操作?新建 一程序后加入以上代码,提示select 处语法错误

#10


引用 9 楼 cfjly 的回复:
新建 一程序后加入以上代码,提示select 处语法错误

中间的 ... 你要根据实际的字段个数填完整了
或者截图上来

#11


如何一表中字段的所有值复制到另一表中对应的字段下?

#12


p0401是表B,0401是表A

#13


你这是 vfp6 吧
抱歉,我只用 vfp9,vfp6 不清楚

#14


如何一表中字段的所有值复制到另一表中对应的字段下?如何一表中字段的所有值复制到另一表中对应的字段下?
用VF9测试了,还出现以下错误?

#15


本帖最后由 dkfdtf 于 2014-11-04 15:27:13 编辑
最后一个 Iif 后面多了一个逗号
另外, Select 的字段数比 Insert 需要的字段数多出了一个 dwdm

#16


如何一表中字段的所有值复制到另一表中对应的字段下?
select的字段里去了DWDM后,显示GROUPY by语句缺少 

#17


是全去掉DWDM后提示GROUPBY 语句缺少,只去掉Select后的DWDM,提示找不到变量 DWDM

#18


不知道你前几个字段代表的是什么,从字段名对应关系上来看,应该是这样:
Insert into f:\zz\p0401.dbf (xm, dwdm, sfzh, 初一下, 初二上, 初二下初, 初二下末, 初三上) ;
Select xm, dwdm,sfzh, ;
Iif(id == 2, id, 0), ;
Iif(id == 3, id, 0), ;
Iif(id == 4, id, 0), ;
Iif(id == 5, id, 0), ;
Iif(id == 6, id, 0) ;
from f:\zz\0401.dbf ;
group by xm, dwdm, sfzh

#19


dwdm是学校代号四位数 字符型,sfzh是身份证号,xm是姓名
总提示 找不到变量DWDM

#20


id=2代表初一,依次类推

#21


检查 p0401.dbf 和 0401.dbf 中是否都存在 dwdm 字段

#22


都存在,就是提示子句group 缺少

#23


先执行一句
Set EngineBehavior 70

#24


楼上正解,这句作用是什么?
程序运行后为什么id年限都全,比如
李好   id 1  2  3  4  5  6 
转置后目标表显示的字段:只显示
李好   0  0   0  0  0   6
但是明明李好其他年级在原表中都有ID呀,转后怎么只显示最后一个学期!

#25


本帖最后由 dkfdtf 于 2014-11-04 17:31:43 编辑
要上面的结果,需要 sum 操作,这样:
Insert into f:\zz\p0401.dbf (xm, dwdm, sfzh, 初一下, 初二上, 初二下初, 初二下末, 初三上) ;
Select xm, dwdm,sfzh, ;
sum(Iif(id == 2, id, 0)), ;
sum(Iif(id == 3, id, 0)), ;
sum(Iif(id == 4, id, 0)), ;
sum(Iif(id == 5, id, 0)), ;
sum(Iif(id == 6, id, 0)), ;
from f:\zz\0401.dbf ;
group by xm, dwdm, sfzh
这样也就不需要 Set EngineBehavior 70 了,因为这条语句已经符合 vfp9 sql 语法规范了