我们有一个在NVL语句中使用大小写的查询
但是我认为NVL可以删除
请参考以下查询部分-
select f1, NVL((
CASE
WHEN PROD_CD = 'ESALE'
THEN SUM (prod_count)
WHEN PROD_CD = 'RSALE'
THEN (SUM (prod_count) * -1)
ELSE NULL
END),0) AS SALEQTY
我们还能通过这样写来避免NVL吗
select f1,
CASE
WHEN PROD_CD = 'ESALE'
THEN SUM (prod_count)
WHEN PROD_CD = 'RSALE'
THEN (SUM (prod_count) * -1)
ELSE 0
END AS SALEQTY,
最佳答案
首先,这是一个奇怪的构造。其次,相对于COALESCE()
,我更喜欢NVL()
(标准函数),但这无关紧要。
如果给定组的所有NVL()
值都可以是COALESCE()
,则需要prod_count
/ NULL
。如果是这种情况,则需要进行外部检查。仅在其他列上添加ELSE
并没有帮助。
我还将注意到逻辑看起来很可疑。通常,CASE
作为SUM()
的参数使用-通常不需要NULL
-check:
SELECT f1,
SUM(CASE WHEN PROD_CD = 'ESALE'
THEN prod_count
WHEN PROD_CD = 'RSALE'
THEN - prod_count
ELSE 0
END) AS SALEQTY,
关于sql - NVL用例查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55626883/