create
orreplace
procedure
row_to_col(tabname
invarchar2
,group_col
invarchar2
, column_col
invarchar2
,value_col
invarchar2
,aggregate_func
invarchar2
default
'max',
colorder
invarchar2
default
null
,roworder
invarchar2
default
null
, when_value_null
invarchar2
default
null
,viewname
invarchar2
default
'v_tmp')
authid
current_user
assqlstr
varchar2
(2000):=
'create or replace view '||
viewname||'
as select '||
group_col||'
';c1 sys_refcursor;
v1 varchar2
(100
);begin
open
c1 for
'select distinct '||
column_col||'
from '||
tabname
||case
when
colorder
isnot
null
then
'order by '||
colorder
end;
loop
fetch
c1 into
v1;exit
whenc1%
notfound;
sqlstr:
=sqlstr
||chr(10)
||','
||case
when
when_value_null
isnot
null
then
'nvl(
'end
||aggregate_func||'
(decode(to_char('||
column_col||'
),'''
||v1
||''','
||value_col||'
))'||case
when
when_value_null
isnot
null
then
chr(
44)
||when_value_null
||chr(
41)
end||'"
'||v1||'"
';endloop;
close
c1;sqlstr:
=sqlstr||'
from '||
tabname||'
group by '||
group_col
||case
when
roworder
isnot
null
then
'order by '||
roworder
end;
execute
immediate sqlstr;
endrow_to_col;
行轉列通用儲存過程
1.建立行轉列通用儲存過程 sql create or replace procedure row to col tabname in varchar2,group col in varchar2,column col in varchar2,value col in varchar2,aggreg...
oracle 行轉列,多行轉列
問題描述 應公司要求,設計功能,乙個id,對應不同的值,展示的時候不同的值拼接展示,如何實現 解決思路 1 拼接字串,想到了 oracle function 這樣肯定能實現,但是比較麻煩 2 oracle 自帶的乙個函式 wm concat 函式 非常給力 上 測試表1 create table c...
oracle行轉列實踐
在oracle 11g中,oracle 增加了2個查詢 pivot 行轉列 和unpivot 列轉行 pivot 聚合函式 for 列名 in 型別 其中 in 中可以指定別名,in中還可以指定子查詢 行轉列 select org id,item,sum value from rhsa gcfx r...