[英]Why do I get multiple results from a MAX SQL query?
在 Access 中,我有一个名为 tblBundle 的表,我试图查询按顺序在每个捆绑包上完成的最后一步。
tblBundle 包含:工单、Bundle #、BundleLtr、Step、Complete [boolean]
我最终想将其复制到 vba 中,以创建 Bundle #、Ltr 和最后一步完成的列表,以便在下一步完成时继续输入数据。
出于某种原因,我无法确定,下面的 SQL 查询返回捆绑 1(190、200)的 2 条记录,而我认为它应该只返回一条记录 - 200。
SELECT Max(tblBundle.Step) AS intLstep, tblBundle.BundleNbr, tblBundle.BundleLtr,
tblBundle.Complete
FROM tblBundle
GROUP BY tblBundle.WO, tblBundle.BundleNbr, tblBundle.BundleLtr, tblBundle.Complete
HAVING (((tblBundle.WO)="195687-1-1") AND ((tblBundle.Complete)=True));
谁能帮我弄清楚为什么我的查询返回了额外的值?
似乎是因为您的查询正在分解结果并且返回 BundleNbr 导致它同时占用 Max,因为它是有效的。
您还可以在您的 Group By 语句中对此进行分解并按此汇总。
190 和 200 的值都具有 1 的 BundleNbr。如果删除该列,您将获得 200 的实际最大值(如果您想要 intLStep 的最大值。
我能够在 function 之后使用它来“清理”我的字符串并删除额外的“Bundle 1”。 这不能解决最初的问题,但适用于我的目的。
'[Removes duplicate values from a string]
Function DeDupeString(ByVal sInput As String, Optional ByVal sDelimiter As
String = ",") As String
Dim varSection As Variant
Dim sTemp As String
For Each varSection In Split(sInput, sDelimiter)
If InStr(1, sDelimiter & sTemp & sDelimiter, sDelimiter & varSection & sDelimiter, vbTextCompare) = 0 Then
sTemp = sTemp & sDelimiter & varSection
End If
Next varSection
DeDupeString = Mid(sTemp, Len(sDelimiter) + 1)
End Function
发现自: 从 VBA 中的字符串中删除重复值
在 MsAccess 中,当在数据表视图中查看时,NULL 值显示为空白。 此外,似乎当在数据表视图上为 ShortText 列输入空白时,它们会变成 NULL(在我的 MsAccess 版本上)。 似乎您的数据可能有 NULL 用于其中一个步骤(例如 200),而空格(零或更多)用于另一个(例如步骤 190),您可以强制查询以相同的方式处理两者:
SELECT Max(tblBundle.Step) AS intLstep, tblBundle.BundleNbr,
nz(tblBundle.BundleLtr,'') as BundleLtr,
tblBundle.Complete
FROM tblBundle
GROUP BY tblBundle.WO, tblBundle.BundleNbr,
nz(tblBundle.BundleLtr,''), tblBundle.Complete
HAVING (((tblBundle.WO)="195687-1-1") AND ((tblBundle.Complete)=True));
请注意,不可见字符实际上可以是看起来像空格的字符,但实际上不是(如不间断空格)等。如果上述解决方案不起作用,请尝试以下操作:
SELECT asc(mid(BundleLtr, 1,1)), asc(mid(BundleLtr, 2,1)) FROM Table2 where Step=190
查看该列中数据的 ascii 值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.