2016-06-06 5 views
0

Я прочитал несколько сообщений и не смог найти решение.Таблица Unpivot SQL Oracle

У меня есть следующая таблица ответов. ID 184 будет иметь неизвестное количество записей, поэтому жесткая кодировка каждой суммы и имени не является вариантом.

ID TEXT TAG ORD 184 Halifax Bnk 1 184 RBS Bnk 2 184 Natwest Bnk 3 184 32.16 Amt 1 184 80.15 Amt 2 184 62.54 Amt 3

мне нужен следующий вывод, основанный на TAG и ORD мне нужно перечислить банк & Сумма.

Bank Amount Halifax 32.16 RBS 80.15 Natwest 62.54

Мой код до сих пор ...

select * 
from 
(select 
f.id as "ID" 
,a.text as "01TEXT" 
,a.tag as "02TAG" 
,a.ord as "03ORD" 
from 
freq f 

left join answers a 
on a.freq_id = f.id and a.tag in ('Bnk','Amt') 

where 
f.id = 184 
)unpivot (amount for tag in ("03ORD")) 

Любая помощь будет оценена. Thanks Genzz

ответ

1

Вам не нужно UNPIVOT этих данных. Вам нужно PIVOT. Это дает вам результаты, которые вы запрашиваете:

with test_data as (
SELECT 184 ID,  'Halifax' text, 'Bnk' tag,  1 ord from dual union all 
SELECT 184 ID,  'RBS' text, 'Bnk' tag,  2 ord from dual union all 
SELECT 184 ID,  'Natwest' text, 'Bnk' tag,  3 ord from dual union all 
SELECT 184 ID,  '32.16' text, 'Amt' tag,  1 ord from dual union all 
SELECT 184 ID,  '80.15' text, 'Amt' tag,  2 ord from dual union all 
SELECT 184 ID,  '62.54' text, 'Amt' tag,  3 ord from dual 
) 
select bank_name, amount from test_data 
pivot (max(text) for tag in ('Bnk' as bank_name, 'Amt' as amount)) 
order by ord 

Только последние 3 строки представляют для вас интерес. SQL-код test_data - это просто рабочий пример без доступа к вашим таблицам.

+0

Вы читали мой ответ? Я «жестко закодировал» записи в 'test_data', чтобы дать мне данные для запроса. Они не являются частью решения. Фактическое решение только фиксирует значения в поле 'tag'. –

+0

Спасибо, Мэтью. Это работает, теперь мне нужно обойти LONG data_type для столбца TEXT. – Genzz

1

вот еще один способ

select 

f.text as "Bank" 
,a.text as "Amount" 
from answers f 
left join answers a 
on a.id = f.id 
and a.tag ='Amt' 
and a.ord = f.ord 

where 
f.id = 184 
and f.tag = 'Bnk'