我正在 Oracle 11g 数据库上开发 PL/SQL Developer v10。这个想法不是写PIVOT
语句中列出的 145 列 write an Pivot XML
and get data from there,而是根据这个答案工作,因为我以前从未在 Oracle 上做过 PIVOT XML,所以我的期望可能是错误的
select * from (
select
tqs.transactiondetailid as transactiondetailid,
q.productid as productid,
tqs.answer as QAnswer,
regexp_substr(q.questiondescription,'(WIF|DT|WT)[([:digit:]|.)]*') as QDesc,
tqs.transactionversion as transactionversion
from TRANSACTIONDETAILQS tqs
inner join question q on q.questionid = tqs.questionid and (
q.questiondescription like 'DT%'
or q.questiondescription like 'WT%'
or q.questiondescription like 'WIF%')
) pivot xml(
min(QAnswer) for QDesc in (
select regexp_substr(q.questiondescription,'(WIF|DT|WT)[([:digit:]|.)]*') as r from question q
where regexp_substr(q.questiondescription,'(WIF|DT|WT)[([:digit:]|.)]*') IS NOT NULL)
)
在 XML 列中不返回任何数据,它们都是空的,但是下面我明确列出列的语句可以正常工作
select * from (
select
tqs.transactiondetailid as transactiondetailid,
q.productid as productid,
tqs.answer as QAnswer,
regexp_substr(q.questiondescription,'(WIF|DT|WT)[([:digit:]|.)]*') as QDesc,
tqs.transactionversion as transactionversion
from TRANSACTIONDETAILQS tqs
inner join question q on q.questionid = tqs.questionid and (
q.questiondescription like 'DT%'
or q.questiondescription like 'WT%'
or q.questiondescription like 'WIF%')
) pivot (
min(QAnswer) for QDesc in (
'DT01.','DT02.','WT01.')
)
如何在不明确列出列的情况下进行旋转?