我可以用零替换 PIVOT 中的空值吗?

JHF*_*HFB 7 oracle-11g-r2 pivot

我在 Oracle 中使用 PIVOT 函数并且很好奇是否可以用零替换空值?我知道我可以将整个查询包装在另一个 SELECT 中,然后对值使用 COALESCE,但我很好奇是否有快捷方式。

Tar*_*ryn 8

如果您有以下要透视的数据表:

CREATE TABLE yourtable (id int, name varchar2(1), value varchar(10));

INSERT ALL 
    INTO yourtable (id, name, value )
         VALUES (1, 'A', '1500')
    INTO yourtable (id, name, value )
         VALUES (1, 'B', '4500')
    INTO yourtable (id, name, value )
         VALUES (2, 'C', '3.5')
    INTO yourtable (id, name, value )
         VALUES (3, 'B', 'test')
    INTO yourtable (id, name, value )
         VALUES (4, 'A', 'blah')
    INTO yourtable (id, name, value )
         VALUES (4, 'C', 'hello')
SELECT * FROM dual;
Run Code Online (Sandbox Code Playgroud)

您当前的代码类似于:

select id, OptionA, OptionB, OptionC
from
(
  select id, name, value
  from yourtable
) src
pivot
(
  max(value)
  for name in ('A' as OptionA, 'B' OptionB, 'C' OptionC)
) piv
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo。样本数据将创造null价值。

当您想替换null值时,您必须在最终SELECT列表中进行。所以你的代码需要是:

select id, 
  coalesce(OptionA, '0') OptionA, 
  coalesce(OptionB, '0') OptionB, 
  coalesce(OptionC, '0') OptionC
from
(
  select id, name, value
  from yourtable
)
pivot
(
  max(value)
  for name in ('A' as OptionA, 'B' as OptionB, 'C' as OptionC)
);
Run Code Online (Sandbox Code Playgroud)

参见SQL Fiddle with Demo