[SQL ] 新手求救!關於PIVOT的語法

作者: nzmprophet (nzmprophet)   2019-06-19 11:33:55
資料庫名稱:ORACLE
資料庫版本:12c
內容/問題描述:小弟我用PIVOT寫一個轉置的查詢Table
原先的語法如下=>
declare
sqlqry clob;
cols clob;
begin
select listagg(''''|| PS_C3 ||'''', ',') within group (order by PS_C3)
into cols
from (select distinct PS_C3 from pick2_1);
sqlqry :=
'
create or replace view pick2_2 as
select * from
(
select num_po, datdels, nam_cust,xfer, PS_C3, qty
from pick2_1
)
pivot
(
sum(qty) for PS_C3 in (' || cols || ')
)';
execute immediate sqlqry;
end;
/
後來RUN發現ps_c3這個欄位組成的字串過長 (listagg好像有4000字限制)
於是改用xmlagg的方式組字串
語法如下=>
declare
sqlqry clob;
cols clob;
begin
select
xmlagg(xmlparse(content ''''|| PS_C3 ||''''||',' wellformed) order by
ps_c3).getclobval()
into cols
from (select distinct ps_c3 from pick2_1);
sqlqry :=
'create or replace view pick2_2 as
select * from
(
select num_po, datdels, nam_cust,xfer, PS_C3, qty
from pick2_1
)
pivot
(
sum(qty) for PS_C3 in ( '|| cols ||' )
)';
execute immediate sqlqry;
end;
/
資料庫會出現報錯訊息"ORA-00936:遺漏表示式"在line24
(sum(qty) from PS_C3 in ('|| cols ||') <=這一句
小弟新手卡一段時間了,請各位高手指點迷津, 感謝~
作者: funk6478 (大恩)   2019-06-19 16:39:00
你先確認PS_C3欄位裡有沒有'|| cols ||'這個值吧抱歉 沒看仔細那是動態欄位 但還是確認一下PS_C3的內容有沒有出問題
作者: nzmprophet (nzmprophet)   2019-06-19 17:50:00
PS_C3這個欄位的資料只是很單純的數字而已, 會需要從甚麼方向查嗎?
作者: funk6478 (大恩)   2019-06-19 17:59:00
看來有可能是匯到cols的時候沒有把最後的逗號去掉用rtrim看看rtrim(xmlagg(xmlparse(太長省略).getclobval(),',')
作者: nzmprophet (nzmprophet)   2019-06-19 19:57:00
3q 好像可以了 感謝大神

Links booklink

Contact Us: admin [ a t ] ucptt.com