我有以下SQL查询,它运行得很好,但现在我想根据以下场景计算计数:
SELECT d.vseverity, v.vulnstatus, v.vtitleid, d.vtitle
FROM vulnsummary v
JOIN project p ON v.projid = p.projid
AND v.stagename = p.currentstage
JOIN datasets d ON v.vtitleid = d.datasetid
当前输出为:
现在我想这样显示计数:
高(开放)-2
高(闭合)-0
中(开放)-1
Medium (闭合)-0
低(开放)-3
低(闭合)-1
请帮我解决这个问题,谢谢
发布于 2020-04-27 16:31:58
您需要对不同的严重性和状态值集合执行CROSS JOIN
操作,然后将其LEFT JOIN
到您的表中,以便计算每个严重性/状态组合的值。在没有样本数据的情况下,很难确定,但这样的东西应该可以工作:
SELECT sv.vseverity, st.vulnstatus, COUNT(v.vseverity) AS count
FROM (
SELECT DISTINCT vseverity
FROM datasets
) sv
CROSS JOIN (
SELECT DISTINCT vulnstatus
FROM vulnsummary
) st
LEFT JOIN (
SELECT d.vseverity, v.vulnstatus
FROM vulnsummary v
JOIN project p ON v.projid = p.projid
AND v.stagename = p.currentstage
JOIN datasets d ON v.vtitleid = d.datasetid
) v ON v.vseverity = sv.vseverity AND v.vulnstatus = st.vulnstatus
GROUP BY sv.vseverity, st.vulnstatus
发布于 2020-04-27 16:54:37
我没有您的完整数据集,但是,对主volnstatus表的右外部连接将启用( volnstatus表显示所有选项,即‘'Open','Closed')。一个粗略的草稿示例,其中只填充了volnstatus表:
SELECT COUNT(s.vulnstatus) CountOf, t.vtype
FROM dbo.vusummary s
RIGHT OUTER JOIN
vusummarytype t
ON s.vulnstatus = t.vtype
GROUP BY t.vtype
https://stackoverflow.com/questions/61454543
复制相似问题