我有以下运行良好的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
中等(已关闭)-0
低(打开)-3
低(关闭)-1
请帮助我解决此查询,谢谢
答案 0 :(得分:2)
您需要先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
答案 1 :(得分:0)
我没有完整的数据集,但是,对主volnstatus表的RIGHT OUTER JOIN将启用(volnstatus表显示所有选项,即“打开”,“关闭”)。一个粗略的草稿示例,仅填充了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