SUM 一列然后减去另一列的 SUM
SUM a column then SUBTRACT to the SUM of another column
我有一个 table 具有以下字段:
EmpID,
Code,
Amount,
TransDate,
CM,
CMDate
我想要获取数据网格的是 SUM
所有具有相同 Code
和 SUM
的 CM
的 Amount
Code
与 Amount
相同,然后将 SUM(Amount)
减去 SUM(CM)
,但如果结果为 NULL
(例如,没有 CM
求和并减去 SUM(Amount)
) 然后它只需要 select SUM(Amount)
。我想出了这个声明:
SELECT
TransDate,
Code,
SUM(Amount) - SUM(CM) AS 'Result'
FROM DeductionTbl
WHERE
(EmpID = @empID)
GROUP BY Code, TransDate
ORDER BY TransDate
如果有 SUM(CM)
减去 SUM(Amount)
,我得到结果值,但如果没有 SUM(CM)
,我得到结果 NULL
值相同 Code
。我不想要数据网格上的 NULL
值。如果有 NULL
值只是 return SUM(Amount)
。有没有办法做到这一点?谢谢!
试试这个,在这种情况下,IsNull 将 NULLS 转换为零。
SELECT
TransDate,
Code,
SUM(Amount) - SUM(ISNULL(CM, 0)) AS 'Result'
FROM DeductionTbl
WHERE
(EmpID = @empID)
GROUP BY Code, TransDate
ORDER BY TransDate
使用 ISNULL
s:
SELECT
TransDate,
Code,
isnull(SUM(isnull(Amount,0)),0) - isnull(SUM(isnull(CM,0)),0) AS 'Result'
FROM DeductionTbl
WHERE
(EmpID = @empID)
GROUP BY Code, TransDate
ORDER BY TransDate
NOTE:
The SUM(ISNULL(CM,0))
may return NULL
when running query on an
empty result set also it avoid the ANSI WARNINGS
about aggregating NULL
.
And ISNULL(SUM(CM),0)
is not regarded as nullable.
任何使用空值的操作通常都会产生空值。您需要将空值作为 0 处理。为此我们使用 ISNULL 函数。
试试这个...
SELECT
TransDate,
Code,
SUM(Amount) - ISNULL(SUM(CM), 0) AS 'Result'
FROM DeductionTbl
WHERE
(EmpID = @empID)
GROUP BY Code, TransDate
ORDER BY TransDate
我有一个 table 具有以下字段:
EmpID,
Code,
Amount,
TransDate,
CM,
CMDate
我想要获取数据网格的是 SUM
所有具有相同 Code
和 SUM
的 CM
的 Amount
Code
与 Amount
相同,然后将 SUM(Amount)
减去 SUM(CM)
,但如果结果为 NULL
(例如,没有 CM
求和并减去 SUM(Amount)
) 然后它只需要 select SUM(Amount)
。我想出了这个声明:
SELECT
TransDate,
Code,
SUM(Amount) - SUM(CM) AS 'Result'
FROM DeductionTbl
WHERE
(EmpID = @empID)
GROUP BY Code, TransDate
ORDER BY TransDate
如果有 SUM(CM)
减去 SUM(Amount)
,我得到结果值,但如果没有 SUM(CM)
,我得到结果 NULL
值相同 Code
。我不想要数据网格上的 NULL
值。如果有 NULL
值只是 return SUM(Amount)
。有没有办法做到这一点?谢谢!
试试这个,在这种情况下,IsNull 将 NULLS 转换为零。
SELECT
TransDate,
Code,
SUM(Amount) - SUM(ISNULL(CM, 0)) AS 'Result'
FROM DeductionTbl
WHERE
(EmpID = @empID)
GROUP BY Code, TransDate
ORDER BY TransDate
使用 ISNULL
s:
SELECT
TransDate,
Code,
isnull(SUM(isnull(Amount,0)),0) - isnull(SUM(isnull(CM,0)),0) AS 'Result'
FROM DeductionTbl
WHERE
(EmpID = @empID)
GROUP BY Code, TransDate
ORDER BY TransDate
NOTE:
The
SUM(ISNULL(CM,0))
may returnNULL
when running query on an empty result set also it avoid theANSI WARNINGS
aboutaggregating NULL
.And
ISNULL(SUM(CM),0)
is not regarded as nullable.
任何使用空值的操作通常都会产生空值。您需要将空值作为 0 处理。为此我们使用 ISNULL 函数。
试试这个...
SELECT
TransDate,
Code,
SUM(Amount) - ISNULL(SUM(CM), 0) AS 'Result'
FROM DeductionTbl
WHERE
(EmpID = @empID)
GROUP BY Code, TransDate
ORDER BY TransDate