首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果没有行匹配,该计数如何返回0?

如果没有行匹配,该计数如何返回0?
EN

Stack Overflow用户
提问于 2021-05-31 07:50:14
回答 1查看 74关注 0票数 2

如果没有匹配,我需要以下查询来返回0:

代码语言:javascript
复制
CREATE TABLE #Operations (
    Discriminator varchar(40)
);

INSERT INTO #Operations
VALUES
    ('HistoricoCarga'),
    ('HistoricoDescarga')
;

SELECT
    o.Discriminator,
    CASE 
        WHEN COUNT(*) IS NULL THEN 0
        ELSE COUNT(*)
    END AS Total
FROM 
    HistoricosOperacion ho
        RIGHT JOIN #Operations o
            ON ho.Discriminator = o.Discriminator
WHERE
    ho.FechaEnvioIntegracionUTC IS NULL
    AND DATEDIFF(MINUTE, ho.FechaUTC, GETUTCDATE()) > 10
GROUP BY o.Discriminator;

我尝试过将count(*)更改为count(ho.Discriminator)或将temp表更改为:

代码语言:javascript
复制
CREATE TABLE #Operations (
    Discriminator varchar(40),
    dummy int
);

INSERT INTO #Operations
VALUES
    ('HistoricoCarga', 0),
    ...

我需要输出如下:

代码语言:javascript
复制
HistoricoCarga         0
HistoricoDescarga      0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-31 07:55:58

不要计数(*),从联接的稀疏侧数联接列

代码语言:javascript
复制
CREATE TABLE #Operations (
    Discriminator varchar(40)
);

INSERT INTO #Operations
VALUES
    ('HistoricoCarga'),
    ('HistoricoDescarga')
;

SELECT
    o.Discriminator,
    COUNT(ho.Discriminator) AS Total
FROM 
    
    #Operations o
    LEFT JOIN
    HistoricosOperacion ho
    ON ho.Discriminator = o.Discriminator AND DATEDIFF(MINUTE, ho.FechaUTC, GETUTCDATE()) > 10

GROUP BY o.Discriminator;

将限制移出WHERE并进入ON意味着只有两件事都是真的行才会加入。你还可以考虑:

代码语言:javascript
复制
#Operations o
LEFT JOIN
(SELECT * FROM HistoricosOperacion WHERE DATEDIFF(MINUTE, ho.FechaUTC, GETUTCDATE()) > 10) ho
ON ho.Discriminator = o.Discriminator 

如果这对你来说更有意义

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67769787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档