BZ刷新数据的经验

一、对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_t
 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

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 后每个区只查询出一笔数据;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值