Oracle 11g SQL - 在查询具有PIVOT的情况下将NULLS替换为零

时间:2015-08-19 13:17:38

标签: sql oracle plsql oracle11g

我有以下SQL代码返回我需要的数据,但我试图用零替换所有出现的NULL。

        SELECT * from 
( 
    SELECT Table1.ITMCOD, Table1.ITMDSC, Table2.GRPDSC, Table3.ZONDSC,COALESCE(Table4.CASQTY,0) AS QTY,COALESCE(Table4.QASTAT,'0') AS QASTAT 
    FROM Table5 
    JOIN Table1 ON BLDITM.ITMCOD = Table1.ITMCOD 
    JOIN Table3 ON Table5.PUT_ZONLST = Table3.ZONLST 
    JOIN Table2 ON Table2.Group = Table1.Group  
    LEFT JOIN Table4  ON Table1.ITMCOD = Table4.ITMCOD 
) 
PIVOT 
    (Sum(Qty) 
    FOR QASTAT in ('RL' RL,'HD' HD) 
    )order by ITMCOD;

我尝试用NVL替换COALESCE,但仍然得到与所示相同的结果。我试图摆脱的空值在RL和HD列中。它们不是任何表中的实际字段,而是由pivot函数生成。

请注意,我的代码中第一次出现Coalesce会将空值替换为实际零,而第二次出现是字符“0”。我尝试了零,但它给出了一个错误。它们都应该是数字(零)

我对SQL不是很有经验,非常感谢您的帮助。

Results

2 个答案:

答案 0 :(得分:1)

解决方案找到了!

出于反复试验,我设法解决了这个问题:)

基本上,代替代码开头的select * from,我输入了实际的字段名称和COALESCE函数,如图所示,

SELECT ITMCOD, ITMDSC, GRPDSC, ZONDSC,COALESCE(RL,0) AS RL,COALESCE(HD,0) as HD from

我希望这可以帮助其他有类似问题的人。

感谢

答案 1 :(得分:0)

而不是select *,指定由透视查询生成的列;然后,您可以正常应用nvl()coalesce()

SELECT ITMCOD, ITMDSC, GRPDSC, ZONDSC, NVL(RL, 0) RL, NVL(HD, 0) HD
from 
( 
    SELECT Table1.ITMCOD, Table1.ITMDSC, Table2.GRPDSC, Table3.ZONDSC, Table4.CASQTY AS QTY, Table4.QASTAT
    ...

在内部查询中替换空数量并不是真的在这里做任何事情,所以我已经删除了那些coalesce()个调用;其余的都是一样的。

相关问题