JHF*_*HFB 7 oracle-11g-r2 pivot
我在 Oracle 中使用 PIVOT 函数并且很好奇是否可以用零替换空值?我知道我可以将整个查询包装在另一个 SELECT 中,然后对值使用 COALESCE,但我很好奇是否有快捷方式。
如果您有以下要透视的数据表:
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)
| 归档时间: |
|
| 查看次数: |
12619 次 |
| 最近记录: |