当前位置: 首页 > 面试题库 >

更改SUM会将NULL返回零

杨腾
2023-03-14
问题内容

我有一个存储过程,如下所示:

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.

我遇到的问题是,该站点本月没有任何事件,因此当我运行此proc时,我为该站点返回了NULL值,但是我需要返回零/ 0以便在内部使用SSRS中的图表。

我曾尝试使用合并和isull无济于事。

    SELECT COALESCE(SUM(c.Logged,0))
    SELECT SUM(ISNULL(c.Logged,0))

有没有一种方法可以正确格式化此格式?

干杯,

背风处


问题答案:

放在外面:

SELECT COALESCE(

(  
    SELECT SUM(i.Logged)  
    FROM tbl_Sites s  
    INNER JOIN tbl_Incidents i  
    ON s.Location = i.Locatio餃﹏  
    WHERE s.Sites = @SiteName AND i.[month] = DATEADD(mm, DATEDIFF(mm, 0, GetDate()) -1,0)  
    GROUP BY s.Sites  
), 0)  AS LoggedIncidents

如果要返回多行,请将INNER JOIN更改为 LEFT JOIN

SELECT COALESCE(SUM(i.Logged),0)
FROM tbl_Sites s  
LEFT JOIN tbl_Incidents i  
ON s.Location = i.Locatio餃﹏  
WHERE s.Sites = @SiteName AND i.[month] = DATEADD(mm, DATEDIFF(mm, 0, GetDate()) -1,0)  
GROUP BY s.Sites

顺便说一句,如果没有保证,请勿在聚合函数中放置任何函数或表达式,例如,不要在ISUM中放置ISNULL,COALESCE,在聚合内部使用函数/表达式削弱性能,查询将通过表扫描执行



 类似资料:
  • 我将数据保存到会话中,但是我尝试将其读回,结果为空。Spring MVC是我的后端,Angular 4是前端。 爪哇: 角: 你知道我错过了什么吗?也许是CORS的事?

  • 我从教程中感觉到,返回一个可丢弃的,不应该改变方法返回类型。 以下是我的尝试: 使用时,一切都很好,直到我添加,然后函数返回类型更改为

  • 问题内容: 我有一个简单的Java类,如下所示: 这段代码的输出是这样的: 为什么s不在finally块中覆盖,而是控制打印输出? 问题答案: 在与所述的执行块完成语句和的值在时间语句执行是由该方法返回的值。finally子句稍后s(在语句完成之后)更改值的事实(此时)并未更改返回值。 请注意,以上内容处理的s是对块中自身值的更改,而不是对s引用对象的更改。如果s是对可变对象的引用(String不

  • 这让我快疯了。我有一个简单的eclipse项目,其中有一个src文件夹和一个类。但我似乎无法让getResource找到它。我做错了什么? 如果我右键单击类名,路径是testsprroject/src/ContextTest。java,根据运行配置中的classpath选项卡,默认的类路径是TestProject。 它不适用于

  • 我有两个活动和两个布局。当我在第一个活动中显示列表时,一切都正常,并在单击时给出列表中项目的编号,但当我尝试在第二个活动中重复相同的内容时,它会告诉我RecycleServiceClickListener侦听器为空。 适配器: 第一项活动: 第二项活动: 错误: 我不明白为什么在第一种情况下,它正常处理单击,而在第二种情况下,它说RecyclerViewClickListener为null

  • 我在应用程序中使用这些库: 执行官网。收拾一下。改装2:改装:2.4.0' 执行官网。收拾一下。改装2:变流器gson:2.3.0' 实现'com.squareup.okhttp3: okhttp: 3.10.0' 这是我的RetroFitClientInstance类实现: 直到今天早上它是没有问题,但从今天早上它是不工作和getMessage在onFailure返回null和t.toStrin