【发布时间】:2014-03-26 16:09:06
【问题描述】:
我正在就以下声明寻求帮助。我的意图是按dom.OutcomeType 对结果进行分组,只返回结果集中的两条记录(也在下面)。有这么多分组条件的原因是因为我使用的是 Access 2007,它坚持在 group by 语句中包含每个返回值。
SQL 语句
SELECT d.DiagnosticId, d.AbsenceId, dqm.QuestionNumber, dq.Question, dqm.AnswerId, dom.OutcomeType, do.Outcome, d.AcceptedId, d.Reason
FROM (((ct_adt_Diag d
INNER JOIN ct_adt_DiagOMatch dom ON d.DiagnosticId = dom.DiagnosticId)
INNER JOIN ct_adt_DiagOutcome do ON dom.OutcomeId = do.OutcomeId)
INNER JOIN ct_adt_DiagQAMatch dqm ON d.DiagnosticId = dqm.DIagnosticId)
INNER JOIN ct_adt_DiagQuestion dq ON dqm.QuestionId = dq.QuestionId
WHERE d.AbsenceId = 19
GROUP BY dom.OutcomeType, d.DiagnosticId, d.AbsenceId, dq.Question, dqm.AnswerId, dqm.QuestionNumber, do.Outcome, d.AcceptedId, d.Reason
ORDER BY d.DiagnosticId, dqm.QuestionNumber
结果
谢谢
【问题讨论】:
-
既然你没有使用聚合函数,为什么要使用
GROUP BY? -
在 SQL/RA 中(不仅仅是 Access!),如果有 GROUP BY,则每个输出列 必须 在分组或聚合函数中指定 - 或查询根本没有意义。
-
它不只是 ACCESS,任何 DBMS 都会让你这样做。所有非聚合列必须在 Group by Clause 中
-
您可能会发现 this question 在子查询中使用
GROUP BY来限制返回的结果时很有帮助。您似乎完全误解了GROUP BY 的用法,可能应该考虑如何汇总结果。 -
是什么让你怀疑记录多了(“只返回两条记录”)?当您运行 Select * From ct_adt_Diag d Where d.AbsenceId = 19 时会发生什么?