【问题标题】:Why can't I get GROUP BY to work in my LEFT JOIN in Access为什么我不能让 GROUP BY 在 Access 中的 LEFT JOIN 中工作
【发布时间】:2021-10-06 00:51:47
【问题描述】:

我正在尝试从 Access(2007-2016 文件格式)中的两个表中填充一个组合框。
我有两张桌子:

tblSurveyStatus

SurveyID SurveyStatus
1 Y
2 N
3 N/A

tblWorkOrder

WONumber SurveyedID
WO2101 1
WO2102 1
WO2103 2
WO2104 3
WO2105 2
WO2106 {Empty}
WO2107 {Empty}

期望的结果:

WONumber(this col will get hidden) SurveyStatus
WO2101 Y
WO2103 N
WO2104 N/A

此查询在组合框的数据源中有效,无需使用 GROUP BY:

SELECT SurveyedID, SurveyStatus
FROM [tblWorkOrders] a
LEFT JOIN (
    SELECT SurveyID, SurveyStatus
    FROM [tblSurveyStatus] 
) b
ON a.SurveyedID = b.SurveyID
ORDER BY b.SurveyID

此查询的问题在于它返回重复项 (Y,Y,N,N,N/A)。

所以我这样介绍了 GROUP BY:

SELECT SurveyedID, SurveyStatus
FROM [tblWorkOrders] a
LEFT JOIN (
    SELECT SurveyID, SurveyStatus
    FROM [tblSurveyStatus] 
) b
ON a.SurveyedID = b.SurveyID
GROUP BY a.SurveyStatus ORDER BY b.SurveyID

这会导致错误消息“您的查询不包含指定的表达式 'SurveyedID' 作为聚合函数的一部分。”所以,我输入了MIN(SurveyedID),错误消息移到了下一个字段,所以我一直把 MIN() 放在 SQL 中,直到它最终起作用,但是,我得到一个输入框,要求输入“SurveyStatus”,然后另一个输入框要求“调查 ID”。

我花了整整三天的时间研究、阅读本网站和许多其他网站上的主题,但没有成功。我不是程序员,但我有点了解基础知识。我的编程基本上来自于查找代码的 sn-ps 并更改它们以供我使用。请帮忙!

【问题讨论】:

  • 阅读DISTINCT
  • 你能解释一下组合框中你想要什么的语义吗?看起来您想要工作订单表中使用的所有可能的调查状态值,但是您如何决定要排除哪些重复的工作订单?
  • 这能回答你的问题吗? How to add Row Numbers and GROUP BY in Access?
  • 我只需要提取包含每个 SurveyStatus 的第一个(或任何一个)WONumber。一旦我从组合框中选择一个,它就会找到该记录,然后将焦点设置在 SurveyedStatus 上并过滤以显示具有该状态的所有记录。希望能帮助你理解。

标签: sql ms-access


【解决方案1】:

您在“选择”表达式中使用 2 列:SurveyedID、SurveyStatus,而在“分组依据”中,您仅使用无效的 SurveyStatus。 select 中的所有非聚合列也应在“group by”中使用。这就是为什么通过向这些列添加 MIN() 来解决错误(将那些非聚合列转换为聚合列)。

将“SurveyedID”也添加到您的 group by 子句可以解决您的问题。

另外,如果您的唯一目的是避免重复,只需在选择表达式中的列列表之前使用“DISTINCT”

【讨论】:

  • 完全相同的结果。我尝试使用和不使用 MIN()
    SELECT Min(SurveyedID), MIN(SurveyStatus) FROM [Work Orders] a LEFT JOIN ( SELECT Min(SurveyID), MIN(SurveyStatus) FROM [tblSurveyStatus] ) b ON a .SurveyedID = b.SurveyID GROUP BY a.SurveyStatus, a.SurveyedID ORDER BY b.SurveyID
猜你喜欢
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
  • 2016-04-11
  • 2021-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
相关资源
最近更新 更多