Я работаю над разработчиком PL/SQL v10 в базе данных Oracle 11g. Идея заключается в том, вместо того, чтобы писать 145 столбцов, перечисленных в PIVOT
заявлении написать Pivot XML
и получить данные оттуда, I am working on a basis of this answer, как я никогда не делал PIVOT XML, прежде чем на Oracle, так что мои ожидания могут быть ошибочнымиPIVOT или PIVOT XML без прямого перечисления столбцов на Oracle
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.')
)
Как поворачивать без перечисления столбцов в явном виде?
не определен, но ваш 'regexp_substr (q.questiondescription, '(WIF | DT | WT) ...' может быть неправильным. Что произойдет, если вы уменьшите сложность и попытаетесь вывести только одно имя столбца в соответствие, прежде чем пытаться получить все из них? Удачи. – shellter
@shellter 9 месяцев спустя я понял, где проблема, см. обновление. :) –