zoukankan      html  css  js  c++  java
  • oracle 表按照字段快速去重

    --select * from T_FPCPFUNC for update
    --select count(*) ct from T_FPCPFUNC group by govyear,govid,sysid,fpguid order by ct desc
    declare
    --声明
    v_temp_table varchar2(32);
    v_tablename varchar2(32);
    type t_columns is table of varchar2(100); --类型
    cols t_columns ; --字段

    v_str1 varchar2(100);
    v_str2 varchar2(100);
    v_sql varchar2(1000);

    begin
    v_temp_table := 'TEMP_DISTINCT'; --临时表名
    v_tablename := 'T_FPCPFUNC'; --需要去重的表名 --需要修改
    cols:=t_columns('govyear','govid','sysid','fpguid'); --去重的对应字段 ----需要修改
    for i in 1 .. cols.count loop
    v_str1 := v_str1||' b.'||cols(i)||',';
    v_str2 := v_str2||' a.'||cols(i)||',';
    end loop;
    v_str2 := substr(v_str2,0,length(v_str2)-1);
    --创建临时表,临时表中保存重复的数据和rowID
    v_sql :='create table '||v_temp_table||' as select '||v_str1||'b.rowid as dataid from '||v_tablename||' b where b.rowid not in (select MAX(a.ROWID) dataid from '||v_tablename||' a GROUP BY '||v_str2||')';
    --以临时表中rowID为唯一指定删除数据库中的重复数据
    EXECUTE IMMEDIATE v_sql;
    EXECUTE IMMEDIATE 'delete from '||v_tablename||' a where a.rowid in (select b.dataid from '||v_temp_table||' b)';
    commit;
    --删除临时表
    EXECUTE IMMEDIATE'drop table '||v_temp_table;

    end;

  • 相关阅读:
    在光驱按钮不好使用时如何关闭光驱门
    将24位及32位图像数据保存到位图中
    VIM代码自动完成
    加载TLBB场景(一)
    创建异形窗口
    Windows快速关机与重启
    Direct3D9应用CEGUI
    利用GDI+加载图片
    ubuntu MP3乱码解决
    asp.net动态生成控件及访问控件
  • 原文地址:https://www.cnblogs.com/sx2zx/p/11458048.html
Copyright © 2011-2022 走看看