在 Access 中,我有一個名為 tblBundle 的表,我試圖查詢按順序在每個捆綁包上完成的最后一步。
tblBundle 包含:工單、Bundle #、BundleLtr、Step、Complete [boolean]
我最終想將其復制到 vba 中以創建 Bundle #、Ltr 和最后一步完成的串列,以便在下一步完成時繼續輸入資料。
出于某種原因,我無法確定,當我認為它應該只回傳一條記錄 - 200 時,下面的 SQL 查詢回傳了 bundle 1 (190, 200) 的 2 條記錄。
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));

誰能幫我弄清楚為什么我的查詢回傳了額外的值?
uj5u.com熱心網友回復:
似乎是因為您的查詢正在分解結果并且回傳 BundleNbr 導致它同時占用 Max,因為它是有效的。
您還可以在您的 Group By 陳述句中對此進行分解并按此匯總。
190 和 200 的值都具有 1 的 BundleNbr。如果洗掉該列,您將獲得 200 的實際最大值(如果您想要 intLStep 的最大值。
uj5u.com熱心網友回復:
我能夠使用以下函式來“清理”我的字串并洗掉額外的“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 中的字串中洗掉重復值
uj5u.com熱心網友回復:
在 MsAccess 中,在資料表視圖中查看時,NULL 值顯示為空白。此外,似乎當在資料表視圖上為 ShortText 列輸入空白時,它們會變成 NULL(在我的 MsAccess 版本上)。似乎您的資料對于其中一個步驟(例如 200)可能有 NULL,而對于另一個步驟(例如步驟 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 值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/407951.html
標籤:
上一篇:SQL報告活動用戶和登錄
