我在 Microsoft Access 中有一個表,其中包含多個重復記錄,在特定列欄位中包含不同的值。由于原始設計,列欄位型別為短文本,其值包含所有數字,但“無數字”選項除外,暫時無法更改。
在 VBA 中,我試圖找到包含 Field3 中最高值的記錄。例如,該表可能如下所示:
Field1 | Field2 | Field3
Jay Red 2
Aden Blue 1
Jay Red 5
Colin Orange 3
Jay Red No Number
我想回傳包含Jay, Red, 5行的記錄集。
我寫了一個 SQL 字串,但據我所知,這是不對的,因為 Access 抱怨以下內容:

這是 SQL 字串的外觀:
mySQL = "SELECT " & _
"(SELECT TOP 1 Field3" & _
"FROM MyTable" & _
"Where Field1 = '" & rs1.Fields("Field1") & "'" & _
") as Field3, Field1, Field2 " & _
"FROM " & _
"(SELECT Max(Val(Field3)) As Fld3, Field1, Field2 " & _
"FROM MyTable" & _
"GROUP BY Field3, Field1, Field2)"
criteria = "Field1= '" & rs1.Fields("Field1") & "'"
Set rs2 = CurrentDb.OpenRecordset(mySQL, _
dbOpenSnapshot, _
dbReadOnly)
With rs2
rs2.FindLast criteria
If Not rs2.NoMatch Then
Dim str1 As String
str1 = rs2.Fields("Field3")
rs2.Close
Set rs2 = Nothing
End With
我不認為 SQL 字串一般是正確的,但我也不確定如何在列欄位是字串的原因中使用 MAX 函式?任何幫助表示贊賞。
uj5u.com熱心網友回復:
您可以使用如下所示的 SQL 非常簡單地實作這一點:
SELECT TOP 1 Field1, Field2, Field3
FROM MyTable
WHERE Field3 <> 'No Number'
ORDER BY CInt(Field3) DESC;
這假設唯一的非數字值為“No Number”。
將 TOP 1 與 ORDER BY DESC 結合使用,同樣可以獲得最大值,但更簡單,因為不需要子選擇。如果您需要添加其他條件,只需將它們“與”到 WHERE 子句中。
編輯
根據您的評論,您可能需要包含“No Number”,將 SQL 更改為:
SELECT TOP 1 Field1, Field2, Field3
FROM MyTable
WHERE -- your criteria here
ORDER BY CInt(IIF(Field3='No Number',0,Field3)) DESC;
我在這里假設 Field3 存在時總是大于 1 的數字。如果可以為 0,則將 IIF 中的默認值設定為負數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/324379.html
