30 の異なるフィールドを持つテーブルがあります。特定の値がある場合にのみ、すべての列の合計が必要です。フィールド内の値が特定の条件を満たさない場合、フィールドの値を合計の対象として考慮したくありません。たとえば、id、Score1、Score2、Score3、Score4 の 5 つのフィールドがあります。-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)) Teacher_Questionnaire の AS スコア;
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 から 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
サブ終了