查询返回空值但没有错误

时间:2018-03-10 07:48:11

标签: sql sql-server database

我从表TRANSAMT中的列GLPJD中选择值。表中的值可以是负数,但是当它为负数时,我必须将其设为正数,当它为正时,我就这样保留它。结果以NULL形式返回,查询中剩下的内容。这是一个子查询

declare @FY int
set @FY = 2016

SELECT
    DbName, District,
    (SELECT 
         CASE   
            WHEN (TRANSAMT < 0) 
               THEN ISNULL(SUM(TRANSAMT) * -1, 0) 
               ELSE ISNULL(SUM(TRANSAMT), 0)  
         END  
     FROM 
         GLPJD 
     LEFT JOIN 
         GLAMF ON GLPJD.ACCTID = GLAMF.ACCTID  
     WHERE 
         GLPJD.AUDTORG = D.DbName 
         AND GLPJD.ACCTID = 110002 
         AND GLPJD.FISCALYR < @FY 
     GROUP BY
         TRANSAMT) AS TRANSAMT
FROM
    Districts D 

查询结果:

results of the query

2 个答案:

答案 0 :(得分:1)

您的错误可能来自以下事实:在具有NULL值的同时执行SUM会返回NULL结果。所以你应该在SUM中使用ISNULL部分,而不是相反。

您也可以考虑使用ABS功能,这样您就可以摆脱CASE部分。我的方法是从您当前的代码中更改此部分:

SELECT 
         CASE   
            WHEN (TRANSAMT < 0) 
               THEN ISNULL(SUM(TRANSAMT) * -1, 0) 
               ELSE ISNULL(SUM(TRANSAMT), 0)  
         END

只是:

SELECT SUM(ABS(ISNULL(TRANSAMT, 0)))

答案 1 :(得分:0)

sum函数省略空值 看: http://sqlfiddle.com/#!4/0a806/1