一、对BZ的最新入库储位刷数据的过程
1、删除表qwe_t,
DROP TABLE qwe_t;
2、让后创建临时表
CREATE TABLE qwe_t(ent NUMBER(5),
SITE VARCHAR2(20),
liao VARCHAR2(20),
ku VARCHAR2(20),
chu VARCHAR2(20),
NO VARCHAR2(40)
);
3、按照需求查询出你需要的数据
SELECT a.* FROM (
SELECT DISTINCT imafent,imafsite,pmdt006,imaf091,pmdt017,pmdtdocno FROM pmdt_t LEFT JOIN IMAF_T ON imaf001=pmdt006
and pmdtent = imafent AND pmdtsite = imafsite AND pmdt016 = imaf091 AND imafent=88
) a ,pmds_t WHERE 1=1 AND pmdsent = a.IMAFENT AND pmdssite = a.imafsite AND pmdsdocno = a.pmdtdocno AND pmds000 IN ('6','12')
AND pmdsent=88
4、将查询出的数据插入到临时表中
/*将查询的数据插入临时表中*/
INSERT INTO qwe_tSELECT a.* FROM (
SELECT DISTINCT imafent,imafsite,pmdt006,imaf091,pmdt017,pmdtdocno FROM pmdt_t LEFT JOIN IMAF_T ON imaf001=pmdt006
and pmdtent = imafent AND pmdtsite = imafsite AND pmdt016 = imaf091 AND imafent=88
) a ,pmds_t WHERE 1=1 AND pmdsent = a.IMAFENT AND pmdssite = a.imafsite AND pmdsdocno = a.pmdtdocno AND pmds000 IN ('6','12')
AND pmdsent=88
5、删除临时表中的数据与要插入的表中数据重复的数据
/*删除主键重复的数据*/
DELETE FROM qwe_t WHERE EXISTS(SELECT 1 FROM inaauc_t WHERE ent=inaaucent AND SITE=inaaucsite AND liao=inaauc001
AND ku=inaauc002 )
6、查询临时表中的数据按照目标表的主键的字段查询数据,去除主键重复数据
select s.ent,s.site,s.liao,s.ku,s.chu,'Y'
from (
select qwe_t.*, row_number() over (partition by ent,SITE,liao,ku order by chu) as group_idx
from qwe_t
) s
WHERE group_idx=1
7、将符合条件的数据插入到目标表中
/*插入inaauc_t中*/
INSERT INTO inaauc_t(inaaucent,inaaucsite,inaauc001,inaauc002,inaauc003,inaaucstus )select s.ent,s.site,s.liao,s.ku,s.chu,'Y'
from (
select qwe_t.*, row_number() over (partition by ent,SITE,liao,ku order by chu) as group_idx
from qwe_t
) s
WHERE group_idx=1
二、本次刷数据的经验
1、本次刷数据的第一步在查询出数据的时候,对主表、从表的分析不够,导致查询出得数据重复的数据太多,所以在查询数据是应仔细考虑到查询数据的主从的关系;
2、对第六步中使用的查询使用的分析函数的使用是本次的主要收获;
row_number() over (partition by ent,SITE,liao,ku order by chu【asc|desc】) 说的是将查询结果按照 ent,SITE,liao,ku 字段分区,然后每个分区里面的数据再按照chu 的优先级顺序排序, 至于asc (正序)和desc(倒序) 就是升序和降序了,可以不写,默认是asc(正序);
select qwe_t.*, row_number() over (partition by ent,SITE,liao,ku order by chu) as group_idx
from qwe_t
这个查询语句的目的是按照 ent,SITE,liao,ku 字段分区,然后每个分区里面的数据再按照chu 的优先级顺序排序给每一笔数据增加一个排序的序号 字段名称为:group_idx 所以在第六步数有了查询条件为 group_idx=1 ,也就是按照ent,SITE,liao,ku 后每个区只查询出一笔数据;