sql - 使用 PIVOT 的 NULL 字段

标签 sql oracle oracle11g pivot

我请求您的配合,因为在表上透视并用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/

相关文章:

JavaPreparedStatement 表的注释

java - Hibernate - 获取只有一个复合主键值的行?

visual-studio-2010 - 字符串未被识别为有效的 bool 值。 - 与 C# 相关的错误。 GridView 复选框字段

sql - View 中的日期减法应该创建哪些索引?

mysql - 在sql中统计年龄并查看sql表中的数据

sql - SSRS 报表生成器 - 仅在第一页上显示标题(带页码)

java - 我在使用 netbeans 时收到此错误 pls 00103

oracle - 回滚@Oracle 上的存储过程

oracle11g - 我们什么时候创建位图索引?

sql - 动态 SQL 或 WITH 子句