SQL Количество запросов с JOIN - PullRequest
1 голос
/ 27 апреля 2020

У меня есть следующий 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

Текущий вывод:

text

Теперь я хочу показать счет следующим образом:

Высокий (открытый) - 2

Высокий (закрытый) - 0

Средний (Открытый) - 1

Средний (Закрытый) - 0

Низкий (Открытый) - 3

Низкий (Закрытый) - 1

Пожалуйста, помогите мне, чтобы решить этот запрос, спасибо

Ответы [ 2 ]

2 голосов
/ 27 апреля 2020

Вам необходимо 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
0 голосов
/ 27 апреля 2020

У меня нет вашего полного набора данных, однако, будет включено ПРАВИЛЬНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ к главной таблице 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...