Ich habe Probleme, die Ergebnisse, die ich von einer SQL Server 2008-Abfrage erhalten möchte. Abfrage 1 erzeugt die Ergebnisse, die ich für [GeneralErrors] haben möchte, und Abfrage 2 erzeugt die korrekten Ergebnisse für [RehabErrors], aber ich brauche sie wirklich beide in derselben Zeile. Wenn ich versuche, die zwei Abfragen in Abfrage 3 zu kombinieren, sind meine Ergebnisse für [GeneralErrors] falsch, aber die Art, wie ich die Tabellen gehe.SQL Server 2008-Abfrage - Tabellenverknüpfung
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
Abfrage 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
Abfrage 3: Mein Versuch, die beiden Abfragen kombiniert, die zu falschen Ergebnissen
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
gewünschten Ergebnisse produziert:
Die lange Summe in der 3. Abfrage mit dem ganzen Fall ist es von der ersten Abfrage anders. Warum sollten Sie dieselben Ergebnisse erwarten? Und Sie könnten ein 'COUNT (DISTINCT RehabMetricsCalls.RehabMetricID)' für RehabErrors verwenden? – LukStorms
Btw, um die gleichen ReviewId's in der dritten Abfrage zu bekommen, müssten Sie aus Bewertungen auswählen und dann links die anderen 2 Tabellen beitreten. – LukStorms