Alb*_*orz 19 sql-server sql-server-2008
以下哪一项是正确的?
SUM(ISNULL(Sales,0)) AS Sales,
ISNULL(SUM(Sales),0) AS Sales,
Run Code Online (Sandbox Code Playgroud)
或者他们都是正确的?
Mar*_*ith 18
除非您在空结果集上运行查询,否则它们都返回相同的值.
WITH Sales(Sales) AS
(
SELECT 1
)
SELECT
SUM(ISNULL(Sales,0)) AS Sales,
ISNULL(SUM(Sales),0) AS Sales
FROM Sales
WHERE 1=0
Run Code Online (Sandbox Code Playgroud)
返回
Sales Sales
----------- -----------
NULL 0
Run Code Online (Sandbox Code Playgroud)
该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
Run Code Online (Sandbox Code Playgroud)
您将得到 21、21、0 和 NULL。如果您不想处理空值,则可以使用 ISNULL(SUM(X),0) 。
归档时间: |
|
查看次数: |
30042 次 |
最近记录: |