У меня возникли проблемы с получением результатов, которые я хочу получить из запроса SQL Server 2008. Запрос 1 дает результаты, которые я хочу для [GeneralErrors], а Query 2 дает правильные результаты для [RehabErrors], но мне действительно нужны они оба в одной строке. Когда я пытаюсь объединить два запроса в Query 3, мои результаты для [GeneralErrors] неверны, но в том, как я иду по таблицам.SQL Server 2008 Query - join join
Query1:
SELECT
ReviewID,
SUM(CASE Score_CorrectID_Accuracy WHEN 'Error' THEN 1 ELSE 0 END +
CASE Score_ProperlyIdentified_Accuracy WHEN 'Error' THEN 1 ELSE 0 END) AS GeneralErrors
FROM
Reviews
WHERE
(UserID IS NOT NULL AND UserID <> '')
GROUP BY
Reviews.ReviewID
Results:
ReviewID GeneralErrors
7 0
8 0
9 0
10 0
11 0
12 9
13 0
14 0
15 4
Запрос 2:
SELECT
Reviews.ReviewID
,COUNT(RehabMetricsCalls.ReviewID) AS RehabErrors
FROM RehabMetrics INNER JOIN
RehabMetricsCalls ON RehabMetrics.RehabMetricID = RehabMetricsCalls.RehabMetricID RIGHT OUTER JOIN
Reviews ON RehabMetricsCalls.ReviewID = Reviews.ReviewID
WHERE
(UserID IS NOT NULL AND UserID <> '')
GROUP BY
Reviews.ReviewID
Results:
ReviewID RehabErrors
7 3
8 0
9 0
10 0
11 0
12 5
13 5
14 0
15 4
Запрос 3: Моя попытка объединения двух запросов, которые производит неправильные результаты
SELECT DISTINCT
Reviews.ReviewID
,SUM(CASE Score_CorrectID_Accuracy WHEN 'Error' THEN 1 ELSE 0 END +
CASE Score_ProperlyIdentified_Accuracy WHEN 'Error' THEN 1 ELSE 0 END +
CASE Score_MiniMiranda_Accuracy WHEN 'Error' THEN 1 ELSE 0 END +
CASE Score_Tone_Accuracy WHEN 'Error' THEN 1 ELSE 0 END +
CASE Score_Accuracy_Accuracy WHEN 'Error' THEN 1 ELSE 0 END +
CASE Score_Notepad_Accuracy WHEN 'Error' THEN 1 ELSE 0 END +
CASE Score_PCAResponsive_Accuracy WHEN 'Error' THEN 1 ELSE 0 END +
CASE Score_AWGInfo_Accuracy WHEN 'Error' THEN 1 ELSE 0 END +
CASE Complaint_Accuracy WHEN 'Error' THEN 1 ELSE 0 END) AS GeneralErrors
,COUNT(RehabMetricsCalls.ReviewID) AS RehabErrors
FROM RehabMetrics INNER JOIN
RehabMetricsCalls ON RehabMetrics.RehabMetricID = RehabMetricsCalls.RehabMetricID INNER JOIN
Reviews ON RehabMetricsCalls.ReviewID = Reviews.ReviewID
WHERE
(UserID IS NOT NULL AND UserID <> '')
GROUP BY
Reviews.ReviewID
Желаемые результаты:
ReviewID GeneralErrors RehabErrors
7 0 3
12 45 5
13 0 5
15 16 4
Это долго сумма в 3-ем запросе со всем случае, он отличается от первого запроса. Почему вы ожидаете тех же результатов? И вы можете использовать 'COUNT (DISTINCT RehabMetricsCalls.RehabMetricID)' для RehabErrors? – LukStorms
Btw, чтобы получить все тот же ReviewId's в 3-м запросе, который вам нужно будет выбрать из Обзоров, а затем присоединиться к двум другим таблицам. – LukStorms