有三个表
task表 task_id task_date task_name task_state
bmxx表 dept_id dept_name
fpxx表 rec_id task_id dept_id fp_hk现在想得到如下的交叉表
部门名称 部门任务数 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
部门1
部门2
部门3
部门4 就是不管fpxx表中有没有这个部门的任务,都要在交叉表中显示出来
task表 task_id task_date task_name task_state
bmxx表 dept_id dept_name
fpxx表 rec_id task_id dept_id fp_hk现在想得到如下的交叉表
部门名称 部门任务数 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
部门1
部门2
部门3
部门4 就是不管fpxx表中有没有这个部门的任务,都要在交叉表中显示出来
create or replace procedure proc(tabname in varchar2,
col1 in varchar2,
col2 in varchar2,
col3 in varchar2,
viewname in varchar2 default 'v_tmp')
as
sqlstr varchar2(2000):='create or replace view '||viewname||' as select '||col1||' ';
c1 sys_refcursor;
v1 varchar2(100);
begin
open c1 for 'select distinct to_char('||col2||') from '||tabname;
loop
fetch c1 into v1;
exit when c1%notfound;
sqlstr:=sqlstr||'
,max(decode('||col2||','''||v1||''','||col3||'))"'||v1||'"';
end loop;
close c1;
sqlstr:=sqlstr||' from '||tabname||' group by '||col1;
execute immediate sqlstr;
end proc;