Ice*_*ols 28 sql null sum coalesce zero
我有一个存储过程如下:
CREATE PROC [dbo].[Incidents]
(@SiteName varchar(200))
AS
SELECT
(
SELECT SUM(i.Logged)
FROM tbl_Sites s
INNER JOIN tbl_Incidents i
ON s.Location = i.Location
WHERE s.Sites = @SiteName AND i.[month] = DATEADD(mm, DATEDIFF(mm, 0, GetDate()) -1,0)
GROUP BY s.Sites
) AS LoggedIncidents
'tbl_Sites contains a list of reported on sites.
'tbl_Incidents contains a generated list of total incidents by site/date (monthly)
'If a site doesn't have any incidents that month it wont be listed.
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是网站本月没有任何事件,因此当我运行此sproc时,我得到为该网站返回的NULL值,但我需要返回一个零/ 0来在图表中使用在SSRS.
我尝试过使用coalesce并且无效.
SELECT COALESCE(SUM(c.Logged,0))
SELECT SUM(ISNULL(c.Logged,0))
Run Code Online (Sandbox Code Playgroud)
有没有办法正确地格式化?
干杯,
背风处
Mic*_*uen 50
把它放在外面:
SELECT COALESCE(
(
SELECT SUM(i.Logged)
FROM tbl_Sites s
INNER JOIN tbl_Incidents i
ON s.Location = i.Locatio?n
WHERE s.Sites = @SiteName AND i.[month] = DATEADD(mm, DATEDIFF(mm, 0, GetDate()) -1,0)
GROUP BY s.Sites
), 0) AS LoggedIncidents
Run Code Online (Sandbox Code Playgroud)
如果要返回多行,请将INNER JOIN更改为LEFT JOIN
SELECT COALESCE(SUM(i.Logged),0)
FROM tbl_Sites s
LEFT JOIN tbl_Incidents i
ON s.Location = i.Locatio?n
WHERE s.Sites = @SiteName AND i.[month] = DATEADD(mm, DATEDIFF(mm, 0, GetDate()) -1,0)
GROUP BY s.Sites
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果没有保证,不要在聚合函数中放置任何函数或表达式,例如不要将ISNULL,COALESCE放在SUM内,使用函数/表达式聚合跛行性能,查询将使用表扫描执行
Kir*_*tan 25
你必须这样使用ISNULL-
ISNULL(SUM(c.Logged), 0)
Run Code Online (Sandbox Code Playgroud)
或者,正如迈克尔所说,你可以使用左外连接.
我在oracle中遇到了这个问题.Oracle没有ISNULL()函数.但是,我们可以使用NVL()函数来实现相同的结果:
NVL(SUM(c.Logged), 0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
80404 次 |
| 最近记录: |