我无法从SQL Server 2008查询中获取所需的结果。查询1为[GeneralErrors]生成我想要的结果,查询2为[RehabErrors]生成正确的结果,但我真的需要它们在同一行上。当我在查询3中尝试并结合这两个查询时,[GeneralErrors]的结果不正确,但是我要去查表的方式。SQL Server 2008查询 - 表连接
查询1:
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)来修复错误? – LukStorms
顺便说一句,要在第3个查询中获得所有相同的ReviewId,您必须从评论中选择,然后将其加入其他2个表中。 – LukStorms