Объедините два запроса с разными таблицами 'FROM', но похожими таблицами 'JOIN' - PullRequest
0 голосов
/ 15 марта 2019

У меня есть два запроса, которые я пытаюсь объединить в один набор результатов.

Запрос 1:

SELECT t1.evalID, t2.[Order], COUNT(t2.StepID) AS 'Total Categories'
FROM Evals t1
JOIN Steps t2 ON t1.TemplateID = t2.TemplateID 
JOIN GradingCats t3 ON t2.StepID = t3.StepID 
GROUP BY t1.EvalID, t2.[Order]
ORDER BY t2.[Order]

Запрос 2:

SELECT t4.EvaluatorID, t6.StepID, t6.[Order], COUNT(t4.Grade) AS 'Grades Entered'
FROM Grading t4
JOIN GradingCats t5 ON t4.GradingCatID = t5.GradingCatID 
JOIN Steps t6 ON t5.StepID = t6.StepID
GROUP BY t6.StepID, t4.EvaluatorID, t6.[Order]

Моя конечная цель - определить, какие этапы оценки имеют пропущенные оценки.

edit (пример данных): Запрос № 1

|---------------------|------------------|---------------------|
|      evalID         |     Order        |  Total Categories   |
|---------------------|------------------|---------------------|
|          81         |      01.00       |         17          |
|---------------------|------------------|---------------------|
|          81         |      02.00       |         17          |
|---------------------|------------------|---------------------|
|          81         |      03.00       |         17          |
|---------------------|------------------|---------------------|

Запрос № 2

|---------------------|------------------|---------------------|------------------|
|     evaluatorID     |       Step       |        Order        |   Grades Entered |
|---------------------|------------------|---------------------|------------------|
|        1178         |        609       |        01.00        |        2         |
|---------------------|------------------|---------------------|------------------|
|        1178         |        615       |        02.00        |        3         |
|---------------------|------------------|---------------------|------------------|
|        9441         |        609       |        01.00        |        17        |
|---------------------|------------------|---------------------|------------------|
|        9441         |        609       |        02.00        |        17        |
|---------------------|------------------|---------------------|------------------|
|        9441         |        609       |        03.00        |        17        |
|---------------------|------------------|---------------------|------------------|

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

Сотрудник (с большим знанием данных, чем я) немного изменил мой запрос:

SELECT query1.stepID, Categories, Graded
FROM
(
    SELECT rs.stepid, COUNT(c.category) AS 'Categories'
    FROM Evals e
    JOIN RunScriptSteps rs ON e.TemplateID = rs.TemplateID
    JOIN GradingCats c ON rs.StepID = c.StepID
    WHERE EvalID = *(someNumber)*
    GROUP BY rs.stepid
)AS query1
LEFT JOIN
(
    SELECT s.StepID, COUNT(Grade) AS 'Graded'
    FROM Grading g
    JOIN GradingCats c ON g.GradingCatID = c.GradingCatID
    JOIN Steps s ON c.StepID = s.StepID
    WHERE EvalID = *(someNumber)*
    GROUP BY s.stepid
) AS query2
ON query1.stepid = query2.stepid
ORDER BY stepid ASC
0 голосов
/ 15 марта 2019

Начиная с первого запроса, который показывает все шаги, связанные с EVAL, вы можете ВНЕШНЕЕ СОЕДИНЕНИЕ присоединиться ко второму запросу, и шаги с нулевым значением в правой части запроса будут теми, у которых пропущены оценки.

Для этого в ваших таблицах должен быть какой-то способ связать Grading с Evals. Этот столбец не виден из кода, который вы разместили, но я предполагаю, что он есть. Может быть, это через GradingCats.

В сокращенном псевдо-коде, просто чтобы показать, что я имею в виду:

SELECT ...
FROM Evals e
INNER JOIN Steps s ON e.TemplateID = s.TemplateID 
LEFT OUTER JOIN Grading g ON g.EvalID = e.EvalID  --use whatever means you have to show which Eval a Grade is from
LEFT OUTER JOIN Steps gs ON {join to Grading through GradingCats as in your second query}
WHERE gs.StepID IS NULL

При анализе результата этого запроса все шаги каждого Eval будут находиться в s.StepID, а когда в той же строке задано значение NULL для gs.StepID, это означает, что шаг не получил оценку.

Обратите внимание, что вы не захотите выполнять какие-либо операции GROUP BY в этом запросе, поскольку вам требуется анализ на уровне строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...