如果没有匹配,我需要以下查询返回 0:
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)
或将临时表更改为:
CREATE TABLE #Operations (
Discriminator varchar(40),
dummy int
);
INSERT INTO #Operations
VALUES
('HistoricoCarga', 0),
...
我需要输出如下:
HistoricoCarga 0
HistoricoDescarga 0
最佳答案
不要 COUNT(*),从连接的稀疏侧开始计算连接列
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 意味着只有同时满足这两个条件的行才会加入。您还可以考虑:
#Operations o
LEFT JOIN
(SELECT * FROM HistoricosOperacion WHERE DATEDIFF(MINUTE, ho.FechaUTC, GETUTCDATE()) > 10) ho
ON ho.Discriminator = o.Discriminator
如果你觉得更有意义
关于sql - 如果没有行匹配,这个计数怎么会返回 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67769787/