以下哪一项是正确的?
SUM(ISNULL(Sales,0)) AS Sales,
ISNULL(SUM(Sales),0) AS Sales,
或者他们都是正确的吗?
答案 0 :(得分:17)
除非您在空结果集上运行查询,否则它们都返回相同的内容。
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))
版本可以避免有关汇总NULL
的ANSI警告。
另一个细微差别是ISNULL(SUM(Sales),0)
的结果列的数据类型不被视为可为空。
答案 1 :(得分:3)
第一个说
汇总每个销售字段,如果该字段为NULL,则将其视为零。
第二个表示总结销售字段,如果总计为NULL,则报告零而不是......
但是,SUM()命令会跳过NULL(虽然你会收到警告),所以第一个命令会导致你不能收到错误消息
答案 2 :(得分:3)
试试这个:
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)就是你的选择。