I request your collaboration because pivot
on a table and separating the records by null
, but still leave the fields at 0 with NVL
Table
product | value ----------+------- Shirts | 1200 Caps | 0 Stocks | 0 Glasses | 100 Shoes | 0
Código pivot
select * from products PIVOT (sum(value) for titles in ('product', 'value')) AS pivot_product
Result:
product | Shirts | Caps | Stocks | Glasses | Shoes ---------+-----------+--------+-------------+---------+---------- value | NULL | NULL | NULL | 100 | NULL value | 1200 | NULL | NULL | NULL | NULL
Expected result:
product | Shirts | Caps | Stocks | Glasses | Shoes ---------+-----------+--------+-------------+-------+---------- valor | 1200 | NULL | NULL | 100 | NULL
Optional
product | Shirts | Caps | Stocks | Glasses | Shoes ---------+-----------+--------+-------------+-------+---------- valor | 1200 | 0 | 0 | 100 | 0
Advertisement
Answer
You need to put the column values in the pivot list:
Oracle Setup:
CREATE TABLE test_data ( product, value ) AS SELECT 'Shirts', 1200 FROM DUAL UNION ALL SELECT 'Caps', 0 FROM DUAL UNION ALL SELECT 'Stocks', 0 FROM DUAL UNION ALL SELECT 'Glasses', 100 FROM DUAL UNION ALL SELECT 'Shoes', 0 FROM DUAL
Query:
SELECT 'value' AS product, p.* FROM test_data PIVOT ( SUM( value ) FOR product IN ( 'Shirts' AS Shirts, 'Caps' AS Caps, 'Stocks' AS Stocks, 'Glasses' AS Glasses, 'Shoes' AS Shoes ) ) p
Output:
PRODUCT | SHIRTS | CAPS | STOCKS | GLASSES | SHOES :------ | -----: | ---: | -----: | ------: | ----: value | 1200 | 0 | 0 | 100 | 0
db<>fiddle here