Я работаю с PL/SQL Developer v10
по базе данных Oracle 11g
.
В нашей системе у нас есть таблица вопросов и ответов, которую мне нужно «сгладить» для каждого клиента на вопрос.Названия колонок Oracle REGEXP_SUBSTR для PIVOT
В одном из вопросов, которые задали следующий сценарий, был задан конкретный код (PIFQ
). Просто UPPER(substr(q.questiondescription,1,6))
, а затем повернуть в список возможных кодов.
select * from (
select
tqs.transactiondetailid as transactiondetailid,
q.productid as productid,
tqs.answer as QAnswer,
UPPER(substr(q.questiondescription,1,6)) as QDesc,
tqs.transactionversion as transactionversion
from TRANSACTIONDETAILQSHIS tqs
inner join question q on q.questionid = tqs.questionid and
q.questiondescription like 'PIFQ%'
) pivot (
min(QAnswer) for QDesc in (
'PIFQ01','PIFQ02','PIFQ03','PIFQ05','PIFQ06','PIFQ07','PIFQ08','PIFQ09','PIFQ10',
'PIFQ11','PIFQ12','PIFQ13','PIFQ14','PIFQ15','PIFQ16','PIFQ17','PIFQ18','PIFQ19','PIFQ20',
'PIFQ21','PIFQ22','PIFQ23','PIFQ24','PIFQ25','PIFQ26','PIFQ27','PIFQ28','PIFQ29','PIFQ30',
'PIFQ31','PIFQ32','PIFQ33','PIFQ34','PIFQ35')
)
, что приводит к одной строке по всем вопросам, указанным в TRANSACTIONDETAILQSHIS.
В настоящее время другой набор вопросов имеет три кода (DT, WIF, WT), которые имеют разную длину.
некоторые примеры:
DT01. Are you married?
DT05. Do you have children?
WIF1.1.1 First Name
WIF1.2 Date Of Birth
WIF7.10 How many other properties do you own?
WIF14.3.7 Post Code
WIF15 Notes to solicitor
WT01. Will Type
Ни один из кодов не имеют пробелы между ними и имеют место сразу же после того, как, но так делают все остальные коды в вопросительного таблице. Я думаю использовать REGEXP_SUBSTR
здесь, чтобы извлечь коды для pivot и использовать ту же логику для захвата QDesc
. Мы говорим о 100 вопросах, поэтому я бы предпочел не перечислять коды.
Я застрял в создании регулярного выражения (это только та часть, которая выбирает правильные коды вопросов, но после того, как я закончу с ней - это будет кусок пирога). Что у меня есть банкомат:
select UPPER(REGEXP_SUBSTR(q.questiondescription,'(WIF|DT|WT)\d{1,2}.')) from question q
это выбрать первую группу (WIF|DT|WT)
и первые номера после
DT01. Are you married?
DT05. Do you have children?
WT01. Will Type
как я делаю логику, которая будет захватывать те с .
и без них на конец (WIF15
).
WIF1.1.1 First Name
WIF1.2 Date Of Birth
WIF7.10 How many other properties do you own?
WIF14.3.7 Post Code
WIF15 Notes to solicitor
пропущенный DT и WT вопросы, но это, безусловно, делает работу с '.' точек. –
Это была опечатка .. Я использовал WI вместо WT .. Исправил ее теперь, она тоже должна работать. –
Вы чемпион! Большое спасибо. –