Хитрый запрос

krl
Дата: 27.09.2004 23:43:21
Есть запрос

create view krl.test1 as
with opr as 
(
	SELECT 	value(XML_Departure) tr,
					extractvalue(value(XML_Departure),'/OPR@REFER') REFER 
	FROM c_lnkimp imp,
		TABLE(XMLSequence(extract(XMLType(imp.text),'/MSG/OPR'))) XML_Departure
)
	select	opr.refer,   
          extractvalue(value(XML_Departure_Props),'/ATTR@CODE') as CODE,
					decode(UPPER(extractvalue(value(XML_Departure_Props),'/ATTR@CODE')), 'POSTMARK', to_char(pk_import_pbt.EncodePostMark(value(XML_Departure_Props))), extractvalue(value(XML_Departure_Props),'/ATTR@VALUE'))   
					/*extractvalue(value(XML_Departure_Props),'/ATTR@VALUE')*/ as VALUE
	from opr, TABLE(XMLSequence(extract(opr.tr,'//ATTR'))) XML_Departure_Props

Если его использовать не для формирования представления, то все нормально-получаем результат вида


9999999999990312100900785,AIRRATE,
9999999999990312100900785,BARCODE,112233445556667
9999999999990312100900785,COMMENT,
9999999999990312100900785,INDEXTO,
9999999999990312100900785,INSRRATE,
9999999999990312100900785,MAILCTG,P
9999999999990312100900785,MAILDIRECT,
9999999999990312100900785,MAILRANK,
9999999999990312100900785,MAILTYPE,4
9999999999990312100900785,MASS,
9999999999990312100900785,MASSRATE,
9999999999990312100900785,MMPO,
9999999999990312100900785,NABZNOT,1
9999999999990312100900785,NAIMMESNAZ,?þ¸úòð ð/ 13
9999999999990312100900785,OPERTYPE,1
9999999999990312100900785,PAYMENT,0.00
9999999999990312100900785,PAYTYPE,8
9999999999990312100900785,RCPNAME,
9999999999990312100900785,SENDCTG,2
9999999999990312100900785,SUMOP,
9999999999990312100900785,TRANSTYPE,
9999999999990312100900785,VALUE,0.00
9999999999990312100900785,POSTMARK,131

Мне необходмо получить результат в виде:

REFER                          AIRRATE     BARCODE     ....   POSTMARK
9999999999990312100900785 112233445556667 ... 131

То есть перевернуть таблицу, записав строки в столбцы, при этом кол-во столбцов известно и фиксировано, как и их наименования.

Как это проще и эффективнее можно сделать?

Ссылки приветствуются...

Заранее спасибо.
krl
Дата: 28.09.2004 08:48:43
Так что, никто не знает ответа? Как все же в таком запросе получить из строк столбцы?

И еще, почему запрос сам по себе работает, а стоит лишь попытаться создать представление, как накрывается сессия Oracle?
GOBUR
Дата: 28.09.2004 09:07:19
Посмотри в FAQ. Вообще это через аналитические функции с подзапросом делается. Примера готового нет
krl
Дата: 28.09.2004 11:47:31
Я уже все FAQ пересмотрел. Можно хоть ссылку конкретную на похожий случай?


И почему интересно я VIEW не могу на таком запросе построить?
SY
Дата: 28.09.2004 15:06:49
Assuming REFER and CODE combination is unique, use:

SELECT  REFER,
        MAX(
            DECODE(
                   CODE,
                   'AIRRATE',VALUE,
                             NULL
                  )
           ) AIRRATE,
        MAX(
            DECODE(
                   CODE,
                   'BARCODE',VALUE,
                             NULL
                  )
           ) BARCODE,
.
.
.
        MAX(
            DECODE(
                   CODE,
                   'POSTMARK',VALUE,
                             NULL
                  )
           ) POSTMARK
  FROM  krl.test1
  GROUP BY REFER
/

SY.