我有一个有 30 个不同字段的表。只有当它们具有特定值时,我才想要所有列的总和。当字段中的值不满足特定条件时,我不希望将字段的值考虑为求和。比如我有5个字段id,Score1,Score2,Score3,Score4。只有当它们没有值 -8 或 -9 时,我才想要所有这些不同字段的总和。我怎样才能做到这一点。
2 回答
在“真正的”SQL 中,您将使用 CASE 语句,但在 Access 中似乎不支持该语句(通过 VBA 除外)。尝试使用类似的东西:
iif(score1 <> -8 and score1 <> -9, score1, 0) + iif(score2 <> -8 and score2 <> -9, score2, 0) + ....
看看这个关于 iif 的详细信息http://office.microsoft.com/en-us/access-help/iif-function-HA001228853.aspx
在 SQL 中,您可以使用这样的查询,
SELECT c_id,ch_id, (IIF(Response4 <> -8 AND Response4 <> -8, Response4 , 0)) + (IIF(Response3 <> -8 AND Response3 <> -8, Response3 , 0)) AS Score from Teacher_Questionnaire ;
在 VBA 中,您可以使用以下相同的内容:
Dim db As Database Dim rs As Recordset Dim sSQL As String Dim sSQL1 As String
sSQL = " SELECT SUM ( " & _
"(IIF(Teacher_Questionnaire.Response4 <> -8 AND Teacher_Questionnaire.Response4 <> -8, Teacher_Questionnaire.Response4 , 0)) + " & _ "(IIF(Teacher_Questionnaire.Response3 <> -8 AND Teacher_Questionnaire.Response3 <> -8 , Teacher_Questionnaire.Response3 , 0)) ) AS 分数" & _ "来自 Teacher_Questionnaire where ch_id = 99"
Set db = CurrentDb
Set rs = db.OpenRecordset(sSQL)
If rs.RecordCount > 0 Then
Me.TxtLevel1 = rs!Score
Else
Me.TxtLevel1 = "N/A"
End If
Set rs = Nothing
Set db = Nothing
结束子