作者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://webptt.com/cn.aspx?n=bbs/Database/M.1560915237.A.5EE.html
1F:→ funk6478: 你先确认PS_C3栏位里有没有'|| cols ||'这个值吧 06/19 16:39
2F:→ funk6478: 抱歉 没看仔细那是动态栏位 但还是确认一下PS_C3的内容 06/19 17:13
3F:→ funk6478: 有没有出问题 06/19 17:13
4F:→ nzmprophet: PS_C3这个栏位的资料只是很单纯的数字而已, 会需要从 06/19 17:50
5F:→ nzmprophet: 甚麽方向查吗? 06/19 17:51
6F:→ funk6478: 看来有可能是汇到cols的时候没有把最後的逗号去掉 06/19 17:59
7F:→ funk6478: 用rtrim看看 06/19 18:05
8F:→ funk6478: rtrim(xmlagg(xmlparse(太长省略).getclobval(),',') 06/19 18:07
9F:→ nzmprophet: 3q 好像可以了 感谢大神 06/19 19:57