--删除重复数据只留一条
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 开3
WITH 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.厂家