Как перевернуть строки в столбцы только средствами SQL (не PL/SQL) , но мне не нужны все столбцы, а только определённые, сами названия столбцов я могу получить подзапросом, но в pivot например нельзя использовать подзапрос.
Итак вот что я сам выяснил, есть следующие способы получения сводной таблицы:
Использовать подзапросы прямо в Select
Использовать DECODE или CASE
Использовать функцию PIVOT
Во всех случаях что я видел надо вручную указывать названия столбцов, можно ли как то этого избежать и формировать названия только заданные подзапросом? Без явного перечисления столбцов.
Если так нельзя сделать, то может можно перечислить все столбцы, но как то скрыть нулевые столбцы (в них все значения NULL получаются)?
Разные примеры из списка выше:
подзапросы в Select
SELECT
object_type, systable.cnt "SYS", systemtable.cnt "SYSTEM", scotttable.cnt "SCOTT"
FROM
(SELECT object_type, COUNT(*) cnt from all_objects WHERE owner = 'SYS' GROUP BY object_type) systable
FULL OUTER JOIN
(SELECT object_type, COUNT(*) cnt from all_objects WHERE owner = 'SYSTEM' GROUP BY object_type) systemtable USING (object_type)
FULL OUTER JOIN
(SELECT object_type, COUNT(*) cnt from all_objects WHERE owner = 'SCOTT' GROUP BY object_type) scotttable USING (object_type)
WHERE object_type IN ('TABLE', 'VIEW', 'TRIGGER');
OBJECT_TYPE SYS SYSTEM SCOTT
-------------------- ---------- ---------- ----------
TRIGGER 10 2
TABLE 998 157
VIEW 3865 12
DECODE или CASE
SELECT
object_type,
COUNT(DECODE(owner, 'SYS', 1, NULL)) "SYS",
COUNT(DECODE(owner, 'SYSTEM', 1, NULL)) "SYSTEM",
COUNT(DECODE(owner, 'SCOTT', 1, NULL)) "SCOTT"
FROM all_objects
WHERE object_type IN ('TABLE', 'VIEW', 'TRIGGER')
GROUP BY object_type;
OBJECT_TYPE SYS SYSTEM SCOTT
-------------------- ---------- ---------- ----------
TRIGGER 10 2 0
TABLE 998 157 0
VIEW 3865 12 0
функция PIVOT
SELECT *
FROM (
SELECT owner, object_type
FROM all_objects
WHERE object_type IN ('TABLE', 'VIEW', 'TRIGGER'))
PIVOT (COUNT(*) FOR owner IN ('SYS', 'SYSTEM', 'SCOTT'));
OBJECT_TYPE 'SYS' 'SYSTEM' 'SCOTT'
-------------------- ---------- ---------- ----------
TRIGGER 10 2 0
TABLE 998 157 0
VIEW 3865 12 0