如何根据每个列的条件得到表中不同列的总和

时间:2012-12-06 23:08:11

标签: ms-access

我有一张有30个不同字段的表格。只有当它们具有特定值时,我才想要所有列的总和。当字段中的值不满足特定条件时,我不希望将字段的值考虑用于求和。例如,我有5个字段ID,Score1,Score2,Score3,Score4。只有当它们没有值-8或-9时,我才想要所有这些不同字段的总和。我怎么能这样做。

2 个答案:

答案 0 :(得分:0)

在“真正的”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

的详细信息,请查看此处

答案 1 :(得分:0)

在SQL中,您可以使用这样的查询,

SELECT c_id,ch_id,(IIF(Response4&lt;&gt; -8 AND Response4&lt;&gt; -8,Response4,0))+ (IIF(Response3&lt;&gt; -8 AND Response3&lt;&gt; -8,Response3,0))AS分数 来自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&lt;&gt; -8 AND Teacher_Questionnaire.Response4&lt;&gt; -8,Teacher_Questionnaire.Response4,0))+”&amp; _ “(IIF(Teacher_Questionnaire.Response3&lt;&gt; -8 AND Teacher_Questionnaire.Response3&lt;&gt; -8,Teacher_Questionnaire.Response3,0)))AS得分”&amp; _ “来自Teacher_Questionnaire,其中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

End Sub