我请求您的配合,因为在表上透视
并用null
分隔记录,但仍然使用NVL
将字段保留为0
表格
product | value
----------+-------
Shirts | 1200
Caps | 0
Stocks | 0
Glasses | 100
Shoes | 0
Código 枢轴
select * from products
PIVOT (sum(value)
for titles in ('product', 'value')) AS pivot_product
结果:
product | Shirts | Caps | Stocks | Glasses | Shoes
---------+-----------+--------+-------------+---------+----------
value | NULL | NULL | NULL | 100 | NULL
value | 1200 | NULL | NULL | NULL | NULL
预期结果:
product | Shirts | Caps | Stocks | Glasses | Shoes
---------+-----------+--------+-------------+-------+----------
valor | 1200 | NULL | NULL | 100 | NULL
可选
product | Shirts | Caps | Stocks | Glasses | Shoes
---------+-----------+--------+-------------+-------+----------
valor | 1200 | 0 | 0 | 100 | 0
最佳答案
您需要将列值放入数据透视表中:
Oracle 设置:
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
查询:
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
输出:
PRODUCT | SHIRTS | CAPS | STOCKS | GLASSES | SHOES :------ | -----: | ---: | -----: | ------: | ----: value | 1200 | 0 | 0 | 100 | 0
db<> fiddle here
关于sql - 使用 PIVOT 的 NULL 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56892300/