--删除重复数据只留一条
delete from  t_kpi_province_m   where   id   not   in   (
    select   max(id)  from   t_kpi_province_m t   group   by   t.指标
)
 
--商品数量
SELECT 商品名称,SUM(商品总量)剩余数量 FROM
(SELECT * FROM AAA
UNION ALL
 SELECT 商品名称,-出库数量 FROM BBB)A GROUP BY 商品名称
 
--查连胜超过两次的球队
select max(nn.team) team, min(nn.y) B, max(nn.y) + 1 E
  from (select n2.team, n2.y
          from (select * from nba) n1
          join (select * from nba) n2 on n1.team = n2.team
         where n1.y = n2.y + 1) nn
 group by (nn.y - rownum)
 order by B
--oracle rownum

 

rownum是oracle预处理字段,默认标序是1,只有记录集已经满足条件后才会进行后续编号。由于第一条记录rownum默认是1,

而你的条件是rownum>=6 对第一条记录比较它的rownum肯定不大于6 所以不满足条件 oracle舍弃第一条记录将数据库第二条记录标序为1再进行比较

肯定都不满足rownum>=6  这样循环也就是说由于没有记录满足rownum>=6所以记录一直被舍弃,rownum一直是1 。

 

排序方法:

select * from (
   select a1.*, rownum rwn  from emp a1   where rownum <=10
) where rwn >= 6;
或者
select * from (
select qx.*,row_number() over(order by qx.empno) rwn from emp qx
) where rwn between 6 and 10赞同15| 评论(3)

 

/**
 *declare自定义赋值方法
 *以scott账户为例
 *2012/9/11 11:17:13
 */
declare
n_num number;
--变量赋值 
v_char varchar2(30):='gmd';
--常量 
c_num constant number:=50;
--属性类型数据 
c_type emp.ename%type;
r_row dept%rowtype;
b_boolean boolean := true;
--自定义数据类型 
type my_type is record(
     mystr varchar2(30),
     mysuser varchar2(30),
     myname varchar2(30)
);
c_my_type my_type;
 
begin
--对boolean类型数据赋值 
if b_boolean = true then
         dbms_output.put_line('真值');
else
  dbms_output.put_line('假值');
end if;
n_num:=50;
dbms_output.put_line(n_num);
select ename into v_char from emp where emp.empno=7369;
dbms_output.put_line(v_char);
--给%type类型数据赋值 
select ename into c_type from emp where emp.empno=7499; 
dbms_output.put_line(c_type); 
--给%rowtype类型数据赋值 
select * into r_row  from dept where deptno=10; 
dbms_output.put_line(r_row.deptno||r_row.dname||r_row.loc); 
--给自定义数据类型赋值 
select ename,job,mgr into c_my_type from emp where  emp.empno=7369; 
dbms_output.put_line(c_my_type.mystr||c_my_type.mysuser||c_my_type.myname); 
end;
 
/**
 *case用法
 *2012/9/11 13:54:29
 */
 
declare  
n_num number:=15; 
begin 
     --第一种case用法 
     case n_num  
          when 10 then 
               dbms_output.put_line('第一个case'); 
          when 20 then 
               dbms_output.put_line('第二个case'); 
          else 
              dbms_output.put_line('没了'); 
     end case; 
     --第二种case用法 
     case  
          when n_num<10 then 
               dbms_output.put_line('小于10'); 
          when n_num>10 and n_num<20 then  
               dbms_output.put_line('大于10小于20'); 
          else  
               dbms_output.put_line('未知数'); 
     end case; 
end;
 
 
/**
 *隐式游标
 *2012/9/11 13:54:29
 */
 
declare 
begin  
  update emp set ename='牛郎' where empno=7369; 
  if sql%found then 
     dbms_output.put_line(sql%rowcount); 
  elsif sql%notfound then 
        dbms_output.put_line('没有影响'); 
  end if; 
  commit; 
end; 
 
/**
 *显式游标
 *2012/9/11 13:54:29
 */
 
 DECLARE
    s_int NUMBER(8) := 10;
    r_row dept%ROWTYPE;
    CURSOR my_cursor(
      deptno NUMBER,
      dname  VARCHAR2,
      loc    VARCHAR2) IS
      SELECT *
      FROM   dept
      WHERE  deptno = deptno
             AND dname = dname
             AND loc = loc;
BEGIN
    OPEN my_cursor(s_int, 'ACCOUNTING', 'NEW YORK');
 
    LOOP
    --
        FETCH my_cursor INTO r_row;
 
        exit WHEN my_cursor%NOTFOUND;
 
        dbms_output.Put_line(r_row.deptno);
 
        dbms_output.Put_line(r_row.dname);
 
        dbms_output.Put_line(r_row.loc);
    END LOOP;
 
    CLOSE my_cursor;
END;
/**
 *更新游标,指向单表的游标
 *2012/9/11 13:54:29
 */
 
declare 
cursor mycursor is 
       select * from dept for update; 
begin 
  for myrow in mycursor 
    loop 
        dbms_output.put_line(myrow.loc); 
       
       --select length(dname) from dept where deptno=10;
       --update dept set dname=myrow.loc||'1' where current of mycursor; 
       --注意的是 current of mycursor
        update dept set dname = substr(myrow.dname,1,length(myrow.dname)-2) where current of mycursor; 
    end loop; 
     commit; 
end; 
/*
  更新游标注意点
  1.通过游标更新行 for update【of 列名】必须和where current of cursor 配套使用。
  2.【of 列名】主要用在指向多表关联的游标中,单表的游标默认锁定。
  2.of后是执行要进行锁定表的列【任意一列即可】
  3.游标指向关联查询的结果集时,必须指明进行锁定的表【要进行更新的表】,
        如果未指定锁定表,将无法更新数据。
  4.如果指定了其中A表的锁,更新B表,出错【01410 无效的rowid】。
*/
 
 
--变量声明赋值
declare
v_char varchar2(30);
v_char1 varchar2(30);
begin
select t.procedure_name  into v_char from   werrorlog t  where  id =2724194;
dbms_output.put_line(v_char);
select regexp_substr(v_char||1234,'[0-9]+' ) into v_char1 from dual;--用正则表达式取出数字
dbms_output.put_line(v_char1);
end;
 
 
--base from sniper table werrorlog
DECLARE
CURSOR mycur IS
SELECT * FROM werrorlog; --DECLARE CURSOR
myrecord werrorlog%ROWTYPE; --DECLARE A RECORD ,AND THE RECORD PROPERTY IS FROM THE TABLE BOOKS
BEGIN
OPEN mycur; --OPEN CURSOR
FETCH mycur INTO myrecord;--FETCH ONE Record TO RECORD FROM CURSOR
WHILE mycur%FOUND LOOP -- LOOP WHEN HAS RECORDS
dbms_output.put_line(myrecord.id||','||myrecord.procedure_name);
FETCH mycur INTO myrecord;--FETCH ONE Record TO RECORD FROM CURSOR AGAIN
END LOOP; --END LOOP
CLOSE mycur;--CLOSE CURSOR
END;
/
 
sourceforge.com
 
--去重复,删除时间段精确到分钟
delete from t_kpi_city_m t where t.类型='GSM'
AND (T.指标='GSM载频个数'
or T.指标='GSM小区个数'
or T.指标='GSM基站个数')
and to_char(t.月份,'yyyy-mm-dd')='2012-08-01'
and to_char(t.创建日期,'mi')='33';
 
 
 
--修表语句
delete from t_kpi_city_m  t where t.指标 in ('GSM无线利用率',''
and to_char(t.月份,'yyyy-mm-dd')='2012-08-01'
and to_char(t.创建日期,'hh24')='11'
 
delete from t_kpi_city_m  t
where to_char(t.月份,'yyyy-mm-dd')='2012-08-01'
and to_char(t.创建日期,'hh24')='11'
 
--动态建表
create or replace procedure proc_test
(
table_name in varchar2, --表名
field1 in varchar2, --字段名
datatype1 in varchar2, --字段类型
field2 in varchar2, --字段名
datatype2 in varchar2 --字段类型
) as
str_sql varchar2(500);
begin
str_sql:=’create table ’||table_name||’(’||field1||’ ’||datatype1||’,’||field2||’ ’||datatype2||’)’;
execute immediate str_sql; --动态执行DDL语句
exception
when others then
null;
end ;
--动态sql执行
execute proc_test('dinya_test','id','number(8) not null','name','varchar2(100)');

 

其实就是存储过程的方式,存储过程调用见java调用存储过程

 

 

--查看表占用的空间

select s.*,bytes/1024/1024 from user_segments s

 

 

create table poieva

(

MONTH date,

城市 VARCHAR2(10),

区域 VARCHAR2(50),

poiid INTEGER,

名称 VARCHAR2(100),

主要类别 VARCHAR2(50),

次要类别 VARCHAR2(50),

细要类别 VARCHAR2(50),

公众 VARCHAR2(10),

教育 VARCHAR2(10),

家园 VARCHAR2(10),

集团 VARCHAR2(10),

类型 VARCHAR2(50),

投产时间 date,

网龄 number(8),

寿命指示 VARCHAR2(50),

阶段名称 VARCHAR2(50),

ap数量 number(8),

运营AP数量 number(8),

室内放装AP数量 number(8),

室内合路AP数量 number(8),

大功率AP数量 number(8),

基站型AP数量 number(8),

脱管AP数量 number(8),

脱管率  NUMBER(20,12),

工程中AP数量 number(8),

建设规模 number(8),

建设规模指示 VARCHAR2(50),

建设规模说明 VARCHAR2(50),

网络流量  NUMBER(20,12),

下行流量  NUMBER(20,12),

上行流量 NUMBER(20,12),

流量规模 number(8),

流量规模指示 VARCHAR2(50),

流量规模说明 VARCHAR2(50),

全省排名 VARCHAR2(50),

行业排名 VARCHAR2(50),

城市行业排名 VARCHAR2(50),

城市排名 VARCHAR2(50),

平均每日流量  NUMBER(20,12),

平均ap每日流量  NUMBER(20,12),

有效ap平均日流量  NUMBER(20,12),

流量密度 number(8),

流量密度指示 VARCHAR2(50),

流量密量说明 VARCHAR2(50),

超忙ap数  number(8),

超闲ap数 number(8),

巨流型ap数量 number(8),

大流量Ap数量 number(8),

中流量ap数量 number(8),

小流量ap数量 number(8),

微流量ap数量 number(8),

零流量ap数量 number(8),

空流量AP数量 number(8),

闲置系数 number(8),

闲置程度 number(8),

闲置率 NUMBER(20,12),

闲置情况指示 VARCHAR2(50),

闲置情况说明 VARCHAR2(50),

服务天数 number(8),

平均每设备每日服务时长 number(8),

热点可用率 NUMBER(20,12),

热点可用率评价 VARCHAR2(50),

热点可用率预示 number(8),

平均ap网管缺勤天数 NUMBER(20,12),

平均ap出勤率 NUMBER(20,12),

ap出勤率评价 VARCHAR2(50),

ap出勤率预示 NUMBER(20,12),

部署CMCC数量 number(8),

部署AUTO数量 number(8),

公众产品部署率 VARCHAR2(50),

部署EDU数量 VARCHAR2(50),

EDU部署率 NUMBER(20,12),

部属集团产品数量 number(8),

部属家园产品数量 number(8),

估计每日上网人数 NUMBER(20,12),

WLANTYPE VARCHAR2(20)

)

 

 

excel数据导入oracle

控制面板-管理工具-数据源(odbc)-增加数据源

plsql tool-odbc导入

create table snipertest as
 
select x.city_name1 city_name,x.ne_name,to_char(x.FIRST_RESULT,'yyyy-mm') 月份,
round(avg(总码资源利用率),2) 总码资源利用率
from
(SELECT /*+ ordered*/
c.city_name1,
TCC_NE_SNAP.USERLABEL NE_NAME,
TPC_UTRANCELL_NE.FIRST_RESULT     FIRST_RESULT,
round(decode(((NVL(TPC_UTRANCELL_NE.BRUUL,0) +NVL(TPC_UTRANCELL_NE.BRUDL,0) )*0.75),0,0,
(NVL(TPC_UTRANCELL_NE.TSNBRASSNBRUUL,0)+NVL(TPC_UTRANCELL_NE.TSNBRASSNBRUDL,0))/
((NVL(TPC_UTRANCELL_NE.BRUUL,0) +NVL(TPC_UTRANCELL_NE.BRUDL,0) )*0.75))*100,2) 总码资源利用率,
c.city_name1||to_char(tpc_utrancell_ne.FIRST_RESULT,'yyyy-mm-dd hh24') a
 
FROM npmdb.TPC_UTRANCELL_NE@npmdb TPC_UTRANCELL_NE,npmdb.TCC_NE_SNAP@npmdb  TCC_NE_SNAP,npmdb.region_city@npmdb c
WHERE   (tcc_ne_snap.NE_TYPE = 9300)
AND TCC_NE_SNAP.COMPRESS_DATE=TPC_UTRANCELL_NE.COMPRESS_DATE
AND TCC_NE_SNAP.NE_ID=TPC_UTRANCELL_NE.NE_ID
AND TCC_NE_SNAP.NE_TYPE=TPC_UTRANCELL_NE.NE_TYPE
and TCC_NE_SNAP.City_Id=c.city_id
AND tpc_utrancell_ne.FIRST_RESULT >= to_date('2012-08-01','yyyy-mm-dd')
AND tpc_utrancell_ne.FIRST_RESULT < to_date('2012-08-31','yyyy-mm-dd')+1)X,
(select /*+ ordered*/
a
from
(select /*+ ordered*/
ne_name,FIRST_RESULT,max(ne_name||gentime) a
from
(SELECT replace(replace(dataapp.SOA_GET_NENAME@rcounttonpm(UTRANCELL.NE_ID, UTRANCELL.NE_TYPE),'辽宁省-',''),'市','') NE_NAME,
       to_char(UTRANCELL.FIRST_RESULT,'yyyy-mm-dd hh24') gentime,
       to_char(UTRANCELL.FIRST_RESULT,'yyyy-mm-dd') FIRST_RESULT,
       round((TSNBRASSNBRUUL_MAX/0.75) / 100,2) 总码资源利用率,
       dense_rank () over (partition by to_char(UTRANCELL.FIRST_RESULT,'yyyy-mm-dd'),
       dataapp.SOA_GET_NENAME@rcounttonpm(UTRANCELL.NE_ID, UTRANCELL.NE_TYPE)
       order by (TSNBRASSNBRUUL_MAX/0.75) / 100 Desc) dr
FROM npmdb.TPA_UTRANCELL_SUM@npmdb UTRANCELL
WHERE utrancell.NE_TYPE =10003
and (1 = 1)
AND utrancell.Sum_Level = 0
AND SV_CAT_ID = -1
AND SV_ID = -1
AND utrancell.FIRST_RESULT >= to_date('2012-08-01','yyyy-mm-dd')
and utrancell.FIRST_RESULT < to_date('2012-08-31','yyyy-mm-dd')+1)
where dr=1
group by ne_name,FIRST_RESULT)
 
 
)Y
      
where x.a=y.a
group by x.city_name1 ,x.ne_name,to_char(x.FIRST_RESULT,'yyyy-mm')

 

异常存储过程创建:

CREATE OR REPLACE PROCEDURE prc_err_log
(
 i_procedure_name Varchar2
,i_err_msg        Varchar2
)
As
v_sqlcode Varchar(10);
v_sqlerrm Varchar(1000);
Begin
  v_sqlcode:=Sqlcode;
  v_sqlerrm:=Sqlerrm;
  Insert Into wErrorLog Values(seq_id.nextval,i_procedure_name,i_err_msg,v_sqlcode,v_sqlerrm,Sysdate);
  commit;
  Exception
   WHEN OTHERS
   Then
      commit;
END;
 
 
--是够关联2G
update T_UCELL_CARD_M set 是否关联2G=
(case
when 关联2G小区的流量 is not null and 月份=trunc(add_months(sysdate,-1),'mm')  then '是'
when 关联2G小区的流量 is null and 月份=trunc(add_months(sysdate,-1),'mm')  then '否'
end)
where 月份=trunc(add_months(sysdate,-1),'mm')
 
--更新覆盖半径
update T_UCELL_CARD_M set 覆盖半径=
(case
when 是否室内='是' and 月份=trunc(add_months(sysdate,-1),'mm')  then 0.05
when 是否室内='否'
and (覆盖区域划分 like '%市辖村%' or 覆盖区域划分 like '%县辖村%')
and 月份=trunc(add_months(sysdate,-1),'mm') then 1
when 是否室内='否'
and (覆盖区域划分 like '%城区%' or 覆盖区域划分 like '%市辖镇%'
or 覆盖区域划分 like '%县城区%' or 覆盖区域划分 like '%县辖镇%')
and 月份=trunc(add_months(sysdate,-1),'mm')  then 0.4
end)
where 月份=trunc(add_months(sysdate,-1),'mm')
--
 
--打开执行计划
 set autotrace traceonly
--执行sql
 select count(*) from emp;
 
 
/**t_ucell_card_m 通过“网管流量”算“数据热度指数” 逻辑是网管流量〉avg(网管流量)*2,数据热度指数=5       
     网管流量<avg(网管流量)*2 and 网管流量〉avg(网管流量)/2,数据热度指数=3      
     网管流量<avg(网管流量)/2,数据热度指数=1     
**/
update t_ucell_card_m set 数据热度指数=
(case
when 网管流量>(select avg(网管流量)*2 平均网管流量 from t_ucell_card_m )*2  then 5
when 网管流量<(select avg(网管流量)*2 平均网管流量 from t_ucell_card_m )*2  and  网管流量>(select avg(网管流量)*2 平均网管流量 from t_ucell_card_m )/2  then 3
when 网管流量<(select avg(网管流量)*2 平均网管流量 from t_ucell_card_m )/2  then 1
end)
where to_char(月份,'yyyy-mm')='2012-08'
 
/**
t_cell_poi_month_relation增加三个字段: 站址,小区流量,数据热度指数
u_cell_card_m 中
站址,总流量/1024/当月天数 小区流量,数据热度指数
**/
 
 
 
UPDATE T_CELL_POI_MONTH_RELATION T1
   SET (T1.站址, T1.小区流量, T1.数据热度指数) =
    (SELECT 站址,
            总流量 / 1024 /TO_NUMBER(TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE,0)), 'dd')) 小区流量,
            数据热度指数
      FROM T_UCELL_CARD_M M
      WHERE M.LAC = T1.LAC AND M.CI = T1.CI )
      where  to_char(t1.month,'yyyy-mm-dd')='2012-08-01' ;
UPDATE T_CELL_POI_MONTH_RELATION T1
   SET (T1.站址, T1.小区流量, T1.数据热度指数) =
    (SELECT 站址,
            总流量 / 1024 /TO_NUMBER(TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE,0)), 'dd')) 小区流量,
            数据热度指数
      FROM T_UCELL_CARD_M M
      WHERE M.LAC = T1.LAC AND M.CI = T1.CI )
      where  to_char(t1.month,'yyyy-mm-dd')='2012-08-01'
      and exists (SELECT 站址,
            总流量 / 1024 /TO_NUMBER(TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE,0)), 'dd')) 小区流量,
            数据热度指数
      FROM T_UCELL_CARD_M M
      WHERE M.LAC = T1.LAC AND M.CI = T1.CI ) ;

多列變一行

a 表中有三条记录如下:

M N
1 开1
101 开2
10101 开3

如何用一条SQL将a表中的三条数据变成一条插入b表,如下:

M1 N1 M2 N2 M3 N3
 1 开1 101 开2 10101 开3WITH A AS (SELECT 1 M,'開1' N FROM DUAL
 UNION
 SELECT 101 M,'開2' N FROM DUAL
 UNION
 SELECT 10101 M,'開3' N FROM DUAL
 )
 SELECT
 MAX(DECODE(C.SEQ, 1, C.M)) AS M1,
 MAX(DECODE(C.SEQ, 1, C.N)) AS N1,
 MAX(DECODE(C.SEQ, 2, C.M)) AS M2,
 MAX(DECODE(C.SEQ, 2, C.N)) AS N2,
 MAX(DECODE(C.SEQ, 3, C.M)) AS M3,
 MAX(DECODE(C.SEQ, 3, C.N)) AS N3
 FROM
 (
 SELECT A.M,
 A.N,
 ROW_NUMBER () OVER(PARTITION BY 1 ORDER BY A.M) AS SEQ
 FROM A
 ) C

一列變一行

例2:

如下格式: 

Col 
 aaaa 
 bbbb 
 cccc 
 .... 
 转换后 
 col 
 aaaa,bbbb,cccc,....with a as (select 'aaaa' co from dual
 union
 select 'bbbb' co from dual
 union
 select 'cccc' co from dual
 )

方法一:

select substr(max(sys_connect_by_path(co,'->')),3) rm 
 from (select a.*,rownum rn from a)
 start with rn=1
 connect by rn-1=prior rn

方法二:

create or replace function ff (P_CO VARCHAR2)
 return varchar2 is 
 v_co varchar2(400);
 begin
 for c1 in (select co from A WHERE CO=P_CO ) LOOP
 v_co:=v_co||','||C1.CO;
 END LOOP;
 RETURN V_CO;
 END ;
 select MAX(FF(CO) FROM A;

一列變多行

WITH A AS (SELECT 'A' CD FROM DUAL
 UNION
 SELECT 'B' CD FROM DUAL
 UNION
 SELECT 'C' CD FROM DUAL
 UNION
 SELECT 'D' CD FROM DUAL
 UNION
 SELECT 'E' CD FROM DUAL
 UNION
 SELECT 'F' CD FROM DUAL
 UNION
 SELECT 'G' CD FROM DUAL
 UNION
 SELECT 'H' CD FROM DUAL
 UNION
 SELECT 'I' CD FROM DUAL
 )
 select 
 max(decode(mod(rownum, 5), 1, CD, null)) ID1,
 max(decode(mod(rownum, 5), 2, CD, null)) ID2,
 max(decode(mod(rownum, 5), 3, CD, null)) ID3,
 max(decode(mod(rownum, 5), 4, CD, null)) ID4,
 max(decode(mod(rownum, 5), 0, CD, null)) ID5
 from a
 group by ceil(rownum / 5)
 ID1 ID2 ID3 ID4 ID5
 --- --- --- --- ---
 A B C D E
 F G H I

SQL> WITH A AS (SELECT 1 CD1,0 CD2 FROM DUAL
 2 UNION
 3 SELECT 2 CD1,0 CD2 FROM DUAL
 4 UNION
 5 SELECT 3 CD1,0 CD2 FROM DUAL
 6 UNION
 7 SELECT 4 CD1,0 CD2 FROM DUAL
 8 UNION
 9 SELECT 5 CD1,0 CD2 FROM DUAL
 10 )
 11 SELECT * FROM (SELECT MAX(DECODE(RN,1,CD1,NULL)) ID1,
 12 MAX(DECODE(RN,2,CD1,NULL)) ID2,
 13 MAX(DECODE(RN,3,CD1,NULL)) ID3,
 14 MAX(DECODE(RN,4,CD1,NULL)) ID4,
 15 MAX(DECODE(RN,5,CD1,NULL)) ID5
 16 FROM (SELECT CD1,CD2,ROW_NUMBER()OVER( ORDER BY CD1) RN FROM A)
 17 UNION
 18 SELECT MAX(DECODE(RN,1,CD2,NULL)) ID1,
 19 MAX(DECODE(RN,2,CD2,NULL)) ID2,
 20 MAX(DECODE(RN,3,CD2,NULL)) ID3,
 21 MAX(DECODE(RN,4,CD2,NULL)) ID4,
 22 MAX(DECODE(RN,5,CD2,NULL)) ID5
 23 FROM (SELECT CD1,CD2,ROW_NUMBER()OVER( ORDER BY CD1) RN FROM A))
 24 ORDER BY ID1 DESC
 25 ;



ID1 ID2 ID3 ID4 ID5
 ---------- ---------- ---------- ---------- ----------
 1 2 3 4 5
select m7.厂家,
       MSC厂家数量,
       MSS厂家数量,
       MGW厂家数量,
       HLR厂家数量,
       BSC厂家数量,
       RNC厂家数量,
       nvl(MSC厂家数量, 0) + nvl(MSS厂家数量, 0) + nvl(MGW厂家数量, 0) +
       nvl(HLR厂家数量, 0) + nvl(BSC厂家数量, 0) + nvl(RNC厂家数量, 0) as 总量
  from (select distinct (厂家)
          from (select vendor as 厂家
                  from rmw2.rms_msc
                 where stateflag = 0
                 group by vendor
                union all
                select vendor_id as 厂家
                  from rmw2.rms_mss
                 where stateflag = 0
                 group by vendor_id
                union all
                select vendor_id as 厂家
                  from rmw2.rms_mgw
                 where stateflag = 0
                 group by vendor_id
                union all
                select vendor_id as 厂家
                  from rmw2.rms_hlr
                 where stateflag = 0
                 group by vendor_id
                union all
                select vendor_id as 厂家
                  from rmw2.rms_bsc
                 where stateflag = 0
                 group by vendor_id
                union all
                select vendor_id as 厂家
                  from rmw2.rms_rnc
                 where stateflag = 0
                 group by vendor_id)
         where length(厂家) > 1) m7
  left join (select a.vendor as 厂家, count(a.vendor) as msc厂家数量
               from rmw2.rms_msc a
              where a.stateflag = 0
              group by a.vendor) m1
    on m1.厂家 = m7.厂家
  left join (select b.vendor_id as 厂家, count(b.vendor_id) as mss厂家数量
               from rmw2.rms_mss b
              where b.stateflag = 0
              group by b.vendor_id) m2
    on m2.厂家 = m7.厂家
  left join (select c.vendor_id as 厂家, count(c.vendor_id) as mgw厂家数量
               from rmw2.rms_mgw c
              where c.stateflag = 0
                and c.vendor_id not in ('2')
              group by c.vendor_id) m3
    on m3.厂家 = m7.厂家
  left join (select d.vendor_id as 厂家, count(d.vendor_id) as hlr厂家数量
               from rmw2.rms_hlr d
              where d.stateflag = 0
              group by d.vendor_id) m4
    on m4.厂家 = m7.厂家
  left join (select e.vendor_id as 厂家, count(e.vendor_id) as bsc厂家数量
               from rmw2.rms_bsc e
              where e.stateflag = 0
              group by e.vendor_id) m5
    on m5.厂家 = m7.厂家
  left join (select f.vendor_id as 厂家, count(f.vendor_id) as rnc厂家数量
               from rmw2.rms_rnc f
              where f.stateflag = 0
              group by f.vendor_id) m6
    on m6.厂家 = m7.厂家