怎么根据B表字典,替换A表多列单元格中的内容,达到C表的效果?实现方式:excel函数,oracle的sql语句
复制 =VLOOKUP(A3,H2:I11,2,TRUE) 把A3改成B3,复制到B17单元格
重复以上步骤,即可完成,你要注意使用enter键和esc建。enter是确认值的,esc键可以脱离当前单元格编辑
列数不确定,列名不确定,这个问题有意思,直接上sql
---测试数据
create table test_a_20220225
(col1_fasfa varchar2(10),col2_eufyei varchar2(10),col3_bdgooer varchar2(10));
insert into test_a_20220225 values('a','b','e');
insert into test_a_20220225 values('c','v','n');
insert into test_a_20220225 values('x','r','t');
commit;
create table test_b_20220225
(from_str varchar(10),to_str varchar(10));
insert into test_b_20220225 values ('a','1');
insert into test_b_20220225 values ('b','2');
insert into test_b_20220225 values ('c','3');
insert into test_b_20220225 values ('e','4');
insert into test_b_20220225 values ('n','5');
insert into test_b_20220225 values ('t','6');
insert into test_b_20220225 values ('v','7');
insert into test_b_20220225 values ('r','8');
insert into test_b_20220225 values ('x','9');
commit;
--创建c表
create table test_c_20220225 as select * from test_a_20220225 where 1=2;
--生成C表数据
declare
l_sql clob;
begin
l_sql := empty_clob();
dbms_lob.createtemporary(l_sql, true);
l_sql := 'insert into test_c_20220225 select '; --这里放目标表名
for rec in (SELECT t2.column_value.getrootelement() name
FROM (SELECT *
FROM TABLE(XMLSEQUENCE(cursor (select *
from test_a_20220225 --这里放原表名
where rownum = 1)))) t1,
TABLE(XMLSEQUENCE(EXTRACT(t1.column_value,
'/ROW/node()'))) t2) loop
dbms_lob.append(l_sql,
'replace(' || rec.name || ',' || rec.name || ',' ||
'(select to_str from test_b_20220225 where from_str=' || ---这里放用于匹配的表名
rec.name || ')),');
end loop;
dbms_lob.write(lob_loc => l_sql,
amount => 1,
offset => dbms_lob.getlength(l_sql),
buffer => ' ');
dbms_lob.append(l_sql, ' from test_a_20220225 '); ---这里放原表名
execute immediate l_sql;
commit;
end;
--查看c表数据
select * from test_c_20220225;
无论你有多少列,哪怕有几百个列,而且列名没有任何规则,用这个sql都可以把你数据给转换了,不需要在excel表里对每一个列都单独写公式,因为这个sql里面没有指定任何列名,全是动态获取
虽然不优雅,但是好用,数据量不大可以用以下方式,如果数据量大改用存储过程方式for循环逐一处理,但是也是慢。
select
(select distinct 统称 from B dm where dm.简称=t.第一列名 ) 第1列,
(select distinct 统称 from B dm where dm.简称=t.第二列名 ) 第2列,
(select distinct 统称 from B dm where dm.简称=t.第三列名 ) 第3列
from A t
vlookup 一拉就行了,
存三个矩阵,遍历a矩阵,在b中找到对应的值,写到C中。
使用sql语句的自然连接即可完成表的连接
vlookup匹配既可以达到效果。