Можно ли суммировать таблицу по горизонтали и вертикали после выполнения разворота?
Я прочитал и искал, что можно сделать с помощью накопительного пакета, но недостатком является то, что столбцы являются динамическими
PRODUCT | VALUE
:------ | ----:
Shirts | 1200
tax | 15
Stocks | 500
tax | 20
Результат
SHIRTS | tax (Shirts) | STOCKS | tax (Stocks) | TOTAL
-----: | -----------: | -----: | -----------: | -----:
1200 | 35 | 500 | 35 | 570
TOTAL | 35 | 500 | 35 | 570
структура данных, которую я использую, является следующей, чтобы использовать сводку, но мы должны принять во внимание, что столбцы являются динамическими, и чтобы использовать сводку, я использую LISTAGG, чтобы построить строку для сводки
WITH test_data AS
(
--PRODUCT | VALUE
--:------ | ----:
SELECT 1 AS ord, 'Shirts' AS product, 1200 AS value FROM dual UNION ALL
SELECT 2 AS ord, 'tax', 15 FROM dual UNION ALL
SELECT 3 AS ord, 'Stocks', 500 FROM dual UNION ALL
SELECT 4 AS ord, 'tax', 20 FROM dual
)
--SELECT * FROM test_data
, test_data_extended AS
(
SELECT product, value, LAG(product, 1) OVER (ORDER BY ord) AS pre_product
FROM test_data
)
, test_data_new AS
(
SELECT product AS old_product, value, CASE WHEN product = 'tax' THEN 'tax (' || pre_product || ')' ELSE product END AS new_product
FROM test_data_extended
), new_data AS
(
SELECT new_product, value
FROM test_data_new
)
SELECT * FROM new_data
PIVOT
(
SUM( value )
FOR new_product IN
(
'Shirts' AS "Shirts",
'tax (Shirts)' AS "tax (Shirts)",
'Stocks' AS "Stocks",
'tax (Stocks)' AS "tax (Stocks)"
)
);