Используйте PIVOT
:
SQL Fiddle
Настройка схемы Oracle 11g R2 :
CREATE TABLE table_name ( Item, Class, Attribute, Attribute_Val ) AS
SELECT 'Apple', 'Fruit', 'Name', 'Gala' FROM DUAL UNION ALL
SELECT 'Apple', 'Fruit', 'Color', 'Red' FROM DUAL UNION ALL
SELECT 'Apple', 'Fruit', 'Origin', 'USA' FROM DUAL UNION ALL
SELECT 'Apple', 'Fruit', 'Price', '3' FROM DUAL UNION ALL
SELECT 'Mango', 'Fruit', 'Name', 'Alphonso' FROM DUAL UNION ALL
SELECT 'Mango', 'Fruit', 'Color', 'Yellow' FROM DUAL UNION ALL
SELECT 'Mango', 'Fruit', 'Origin', 'MEX, IND' FROM DUAL UNION ALL
SELECT 'Mango', 'Fruit', 'Price', '5' FROM DUAL;
Запрос 1 :
SELECT *
FROM table_name
PIVOT ( MAX( Attribute_Val ) FOR Attribute IN (
'Name' AS name,
'Color' AS color,
'Origin' AS origin,
'Price' AS price
) )
Результаты
| ITEM | CLASS | NAME | COLOR | ORIGIN | PRICE |
|-------|-------|----------|--------|----------|-------|
| Mango | Fruit | Alphonso | Yellow | MEX, IND | 5 |
| Apple | Fruit | Gala | Red | USA | 3 |
Допустим, завтра добавлен новый атрибут (Сезон) для класса "Фрукты". В результате во входной таблице будет 2 строки (по одной для элементов Apple и Mango), и представление должно иметь возможность динамически добавлять новый столбец «Сезон» к своему выводу.
Нет, это невозможно. Представление имеет фиксированное количество столбцов, определенное при его компиляции, и добавление данных (или столбцов) в родительскую таблицу не обновит представление.