选择具有最大字段总数的记录(Access 2010)

时间:2016-07-23 21:28:57

标签: sql access-vba access

我想根据用户在表单上指定的字段“labcode”从表中选择一条记录。可能存在与每个“labcode”相关联的多个记录,并且我想选择具有“tblDSA”中10个相应字段的最高总和的记录。字段命名如下:“A1_MFI”,“A2_MFI”,“C1_MFI “,”“C2_MFI”,“DR1_MFI”,“DR2_MFI”......)

所有10个字段均为“文本”格式,有时包含数字,文本或留空。我只想总结那个字段中包含数字的记录。我是否需要在“tblDSA”中创建一个包含总分的新字段,还是应该避免在表中存储计算值?

{{1}}

上面的SQL包含语法错误(缺少运算符),因此,我无法测试它。我不确定缺少什么? Nz()用于跳过空白记录,Val()用于将每个文本字段转换为值。如果这是正确的方法或我需要做其他事情,请告诉我?感谢

2 个答案:

答案 0 :(得分:0)

看起来你有两件事

  • 在" 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 "   

答案 1 :(得分:0)

好的,经过多次来回,这是针对这个特定问题的最终结果:

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中的字段别名,但它似乎不再那样做,如果它完全没有。