我从表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
查询结果:
答案 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