簡體   English   中英

選擇字段總和最大的記錄 (Access 2010)

[英]Select a record with the largest sum of fields (Access 2010)

我想根據用戶在表單上指定的字段“labcode”從表中選擇一條記錄。 每個“labcode”可能有多個記錄,我想選擇“tblDSA”中10個對應字段總和最高的記錄。字段命名如下:“A1_MFI”、“A2_MFI”、“C1_MFI” ”、“C2_MFI”、“DR1_MFI”、“DR2_MFI”……)

所有 10 個字段都是“文本”格式,有時包含數字、文本或留空。 我只想總結在該字段中包含數字的記錄。 我是否需要在“tblDSA”中創建一個新字段來保存總分,還是應該避免在表中存儲計算值?

Dim SQL As String
Dim db As DAO.Database
Dim tblDSA As DAO.Recordset

Set db = CurrentDb

Set tblDSA = db.OpenRecordset("tblDSA")

   SQL = "SELECT * Nz((Val[A1_MFI])) + Nz((Val[A2_MFI])) + Nz((Val[B1_MFI])) + Nz((Val[B2_MFI])) +  Nz((Val[C1_MFI])) + Nz((Val[C2_MFI])) + Nz((Val[DR1_MFI]))+ Nz((Val[DR2_MFI])) + Nz((Val[DQB1_MFI] + Nz((Val[DQB2_MFI]))as TotalScore FROM tblDSA WHERE [LABCODE] = " & Me.tbLabcode.Value & " ORDER BY TotalScore DESC "


Debug.Print SQL

Set rs = db.OpenRecordset(SQL)

上面的 SQL 包含語法錯誤(缺少運算符),因此,我無法對其進行測試。 我不確定缺少什么? Nz() 用於跳過空白記錄,Val() 用於將每個文本字段轉換為值。 請讓我知道這是正確的方法還是我需要做其他事情? 謝謝

看起來你有兩件事

  • 你在“SELECT *”之后沒有命令
  • 在您的新西蘭聲明之一中缺少兩個括號

@PhillipXT 指出了第一個 - 通過使用他的第二個建議,我認為 SQL 編譯器會為您指出缺少的括號。

用復制/粘貼試試這個

SQL = "SELECT *, Nz((Val[A1_MFI])) + Nz((Val[A2_MFI])) + Nz((Val[B1_MFI])) + _
Nz((Val[B2_MFI])) +  Nz((Val[C1_MFI])) + Nz((Val[C2_MFI])) + Nz((Val[DR1_MFI])) + _   
Nz((Val[DR2_MFI])) + Nz((Val[DQB1_MFI])) + Nz((Val[DQB2_MFI])) AS TotalScore _   
FROM tblDSA _      
WHERE [LABCODE] = " & Me.tbLabcode.Value & _    
" ORDER BY TotalScore DESC "   

好的,經過多次反復之后,這是適用於這個特定問題的最終結果:

SELECT TOP 1 *, (Nz(Val(IIf([A1_MFI] Is Null, 0, [A1_MFI]))) + Nz(Val(IIf([A2_MFI] Is Null, 0, [A2_MFI]))) + ...) AS TotalScore
FROM tblDSA
WHERE [LABCODE] = 57
ORDER BY (Nz(Val(IIf([A1_MFI] Is Null, 0, [A1_MFI]))) + Nz(Val(IIf([A2_MFI] Is Null, 0, [A2_MFI]))) + ...) DESC

我認為 Access 允許 ORDER BY 中的字段別名,但它似乎不再這樣做了,如果它確實這樣做的話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM