У меня есть следующая таблица с именем foo:
ID | KEY | VAL
----------------
1 | 47 | 97
2 | 47 | 98
3 | 47 | 99
4 | 48 | 100
5 | 48 | 101
6 | 49 | 102
Я хочу выполнить запрос на выборку, чтобы результаты отображались следующим образом
UNIQUE_ID | KEY | ID1 | VAL1 | ID2 | VAL2 | ID3 | VAL3
--------------------------------------------------------------
47_1:97_2:98_3:99| 47 | 1 | 97 | 2 | 98 | 3 | 99
48_4:100_5:101 | 48 | 4 | 100 | 5 | 101 | |
49_6:102 | 49 | 6 | 102 | | | |
Итак, в основном все строки стот же ключ получить свернутым в 1 ряд.Может быть где-то от 1-3 строк на значение KEY
Есть ли способ сделать это в SQL-запросе (без написания хранимой процедуры или сценариев)?
Если нет, я мог бытакже работайте с менее желательным выбором
UNIQUE_ID | KEY | IDS | VALS
--------------------------------------------------------------
47_1:97_2:98_3:99| 47 | 1,2,3 | 97,98,99
48_4:100_5:101 | 48 | 4,5 | 100, 101
49_6:102 | 49 | 6 | 102
Спасибо!
ОБНОВЛЕНИЕ:
К сожалению, моя реальная проблема кажется гораздо более сложной, чем этот пример, иУ меня возникают проблемы при работе любого из примеров :( Мой запрос содержит более 120 строк, поэтому отправлять его не очень просто. Это выглядит примерно так:
with v_table as (select ...),
v_table2 as (select foo from v_table where...),
v_table3 as (select foo from v_table where ...),
...
v_table23 as (select foo from v_table where ...)
select distinct (...) as "UniqueID", myKey, myVal, otherCol1, ..., otherCol18
from tbl1 inner join tbl2 on...
...
inner join tbl15 on ...
Если я попробую любой из методов нижеКажется, что я не могу правильно выполнить группирование по причине того, что все остальные данные возвращаются. Пример:
with v_table as (select ...),
v_table2 as (select foo from v_table where...),
v_table3 as (select foo from v_table where ...),
...
v_table23 as (select foo from v_table where ...)
select "Unique ID",
myKey, max(decode(id_col,1,id_col)) as id_1, max(decode(id_col,1,myVal)) as val_1,
max(decode(id_col,2,id_col)) as id_2,max(decode(id_col,2,myVal)) as val_2,
max(decode(id_col,3,id_col)) as id_3,max(decode(id_col,3,myVal)) as val_3
from (
select distinct (...) as "UniqueID", myKey, row_number() over (partition by myKey order by id) as id_col, id, myVal, otherCol1, ..., otherCol18
from tbl1 inner join tbl2 on...
...
inner join tbl15 on ...
) group by myKey;
Дает мне ошибку: ORA-00979: не выражение GROUP BY
потому что я выбираю UniqueID из внутреннего выбора. Мне нужно будет сделать это, а также выбрать другие столбцы из внутренней таблицы.
Любая помощь будет принята!