我有以下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不是很有经验,非常感谢您的帮助。
答案 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()
个调用;其余的都是一样的。