我最近不得不遇到sql查询,尽管这不是我的专长。下面是我使用的查询:我的问题是,如果行的count (1) =0,它就不会显示。第一个查询是第二个查询的演变,如果值为0,它显然会显示这条线。由于代理代码的数量很大,为了使一切变得更快,而不是对n个代码代理执行n次查询,这种演变是必要的。
SELECT
rollout.id AS 'RowNumber',
rollout.AgencyCode,
COUNT(1) AS 'NumberOfTitleAgnecy',
SUM(COUNT(1)) OVER() AS 'SumOfTitle'
FROM STAGINGTITLE AS ST
INNER JOIN (
VALUES
(1,'000001'),
(2,'000002'),
(3,'000003')
) AS rollout (id, CodAgency)
ON ST.AgencyCode = rollout.CodAgency
WHERE ST.ExternalId IS NULL
AND ST.TitleState = 'BackWard'
GROUP BY rollout.id, rollout.CodAgency
ORDER BY rollout.id
SELECT COUNT(1)
FROM STAGINGTITLE AS ST
WHERE ST.AgencyCode = '000001'
AND ST.ExternalId IS NULL
AND ST.TitleState = 'BackWard'对于如何修改第一个查询以使行显示count (1) = 0,您有什么建议吗?
编辑:预期输出
RowNumber | AgencyCode | NumberOfTitleAgnecy | SumOfTitle |
-----------------------------------------------------------
1 | 000001 | 100 | 300 |
2 | 000002 | 0 | 300 |
3 | 000003 | 150 | 300 |
4 | 000004 | 50 | 300 |发布于 2018-10-27 20:52:43
使用LEFT JOIN
SELECT rollout.id AS RowNumber,
rollout.CodAgency,
COUNT(st.AgencyCode) AS NumberOfTitleAgnecy,
SUM(COUNT(st.AgencyCode)) OVER () AS SumOfTitle
FROM (VALUES (1, '000001'), (2, '000002'), (3, '000003')
) rollout(id, CodAgency) LEFT JOIN
STAGINGTITLE ST
ON ST.AgencyCode = rollout.CodAgency AND
ST.ExternalId IS NULL AND ST.TitleState = 'BackWard'
GROUP BY rollout.id, rollout.CodAgency
ORDER BY rollout.id;备注:
WHERE子句已移动到ON子句中,因此该别名不会转换为INNER JOIN.COUNT()现在正在计算匹配项的数量,因此它可以返回ST的别名是固定的。CodAgency的引用已修复。https://stackoverflow.com/questions/53022031
复制相似问题