В настоящее время у меня есть таблица Oracle под названием «test» и данные ниже (3 столбца):
KEY GROUP VALUE
1 col_1 789
1 col_2 12345
1 col_3 525
1 col_4 ABCD
2 col_1 abc
2 col_2 ds
2 col_3 fg
2 col_4 1234
2 col_5 777
Я хочу создать новую таблицу на основе таблицы test, но хочу, чтобы столбец переместился в строку, ниже я ожидаю:
KEY COL1 COL2 COL3 COL4 COL5
1 789 12345 525 ABCD (null)
2 abc ds fg 1234 777
Не каждый «Ключ» имеет все значение «ГРУППА» в «тестовой» таблице. Например, у ключа 2 5 групп, а у ключа 1 только 4, мне нужна новая структура таблицы, чтобы все группы были доступны для любого заданного ключа. Если ключ не имеет значения группы, а другой ключ имеет, оставьте ячейку равной нулю.
Кто-нибудь может написать мне образец запроса? Спасибо!
Возможный дубликат Сводный запрос Oracle SQL


Вы можете попробовать использовать ROW_NUMBER для создания номера строки, а затем выполнить функцию агрегирования условий, чтобы сделать это.
CREATE TABLE T(
"KEY" INT,
"GROUP" VARCHAR(50),
"VALUE" VARCHAR(50)
);
INSERT INTO T VALUES (1,'col_1','789');
INSERT INTO T VALUES (1,'col_2','12345');
INSERT INTO T VALUES (1,'col_3','525');
INSERT INTO T VALUES (1,'col_4','ABCD');
INSERT INTO T VALUES (2,'col_1','abc');
INSERT INTO T VALUES (2,'col_2','ds');
INSERT INTO T VALUES (2,'col_3','fg');
INSERT INTO T VALUES (2,'col_4','1234');
INSERT INTO T VALUES (2,'col_5','777');
Запрос 1:
SELECT "KEY",
MAX(CASE WHEN rn = 1 THEN "VALUE" END) COL1,
MAX(CASE WHEN rn = 2 THEN "VALUE" END) COL2,
MAX(CASE WHEN rn = 3 THEN "VALUE" END) COL3,
MAX(CASE WHEN rn = 4 THEN "VALUE" END) COL4,
MAX(CASE WHEN rn = 5 THEN "VALUE" END) COL5
FROM (
SELECT t1.*,ROW_NUMBER() OVER(PARTITION BY "KEY" ORDER BY "GROUP") rn
FROM T t1
) t1
GROUP BY "KEY"
| KEY | COL1 | COL2 | COL3 | COL4 | COL5 |
|-----|------|-------|------|------|--------|
| 1 | 789 | 12345 | 525 | ABCD | (null) |
| 2 | abc | ds | fg | 1234 | 777 |
Возможный дубликат Как преобразовать строки в столбцы в Oracle?