作者nzmprophet (nzmprophet)
看板Database
標題[SQL ] 新手求救!關於PIVOT的語法
時間Wed Jun 19 11:33:55 2019
資料庫名稱: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 ||') <=這一句
小弟新手卡一段時間了,請各位高手指點迷津, 感謝~
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.130.11.121 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Database/M.1560915237.A.5EE.html
→ funk6478: 你先確認PS_C3欄位裡有沒有'|| cols ||'這個值吧 06/19 16:39
→ funk6478: 抱歉 沒看仔細那是動態欄位 但還是確認一下PS_C3的內容 06/19 17:13
→ funk6478: 有沒有出問題 06/19 17:13
→ nzmprophet: PS_C3這個欄位的資料只是很單純的數字而已, 會需要從 06/19 17:50
→ nzmprophet: 甚麼方向查嗎? 06/19 17:51
→ funk6478: 看來有可能是匯到cols的時候沒有把最後的逗號去掉 06/19 17:59
→ funk6478: 用rtrim看看 06/19 18:05
→ funk6478: rtrim(xmlagg(xmlparse(太長省略).getclobval(),',') 06/19 18:07
→ nzmprophet: 3q 好像可以了 感謝大神 06/19 19:57