我们有一个在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/

10-12 20:54