以下哪一项是正确的?
SUM(ISNULL(Sales,0)) AS Sales,
ISNULL(SUM(Sales),0) AS Sales,
或者他们都是正确的?
以下哪一项是正确的?
SUM(ISNULL(Sales,0)) AS Sales,
ISNULL(SUM(Sales),0) AS Sales,
或者他们都是正确的?
它们都返回相同的结果,除非您在空结果集上运行查询。
WITH Sales(Sales) AS
(
SELECT 1
)
SELECT
SUM(ISNULL(Sales,0)) AS Sales,
ISNULL(SUM(Sales),0) AS Sales
FROM Sales
WHERE 1=0
退货
Sales Sales
----------- -----------
NULL 0
该SUM(ISNULL(Sales,0))
版本将避免关于聚合的 ANSI 警告NULL
。
另一个细微的区别是结果列的数据类型ISNULL(SUM(Sales),0)
不被视为可为空的。
第一个说
对每个 Sales 字段求和,如果该字段为 NULL,则将其视为零。
第二个说总结销售字段,如果总计为 NULL,则改为报告零......
但是,SUM() 命令会跳过 NULL(尽管您会收到警告),因此第一个命令会导致您不会收到错误消息
尝试这个:
DECLARE @table TABLE
(
id INT IDENTITY,
Alborz INT
)
INSERT INTO @table
SELECT 1
UNION ALL
SELECT 1
UNION ALL
SELECT 1
UNION ALL
SELECT 1
UNION ALL
SELECT 1
UNION ALL
SELECT NULL
SELECT ISNULL(SUM(Alborz), 0)
FROM @table
SELECT SUM(ISNULL(Alborz, 0))
FROM @table
DELETE FROM @table
SELECT ISNULL(SUM(Alborz), 0)
FROM @table
SELECT SUM(ISNULL(Alborz, 0))
FROM @table
您将得到 21、21、0 和 NULL。如果您不想处理空值,那么 ISNULL(SUM(X),0) 就是要走的路。
有区别是的。如果我没有记错的话
5 + NULL = NULL
所以第一种情况
SUM(ISNULL(Sales,0)) AS Sales
将 null 值更改为 0,然后将它们相加,这将返回 5
而第二种情况
ISNULL(SUM(Sales),0) AS Sales,
将在相同的数据中返回 null