私はいくつかの繰り返しレコードを持つテーブルを持っています。だから私は2回繰り返されたものを取って、それらのうちの1つだけが合計の列に-99の値を持っているかどうかをチェックしたいと思います。もし両方が-99なら無視しますが、 99よりも2番目の値を取って計算し、その結果を-99で代入します。例えば1つだけに一致するvba sqlにアクセス
---------------------------------------------
Name | N1 | N2 |
----------------------------------------------
A | 500 | 300 |
----------------------------------------------
A | 0 | **-99** |
----------------------------------------------
B | 60 | -99 |
----------------------------------------------
B | 77 | -99 |
----------------------------------------------
C | 0 | -99 |
----------------------------------------------
C | 15 | 100 |
----------------------------------------------
C | 30 | -9 |
----------------------------------------------
両方が-99を有するCカウント= 3ので、しかしAのためにそれがために-99行が更新されているのでここではBを無視する:= 200 500から300
---------------------------------------------
Name | N1 | N2 |
----------------------------------------------
A | 500 | 300 |
----------------------------------------------
A | 0 | **200** |
----------------------------------------------
私は、コードの一部をやったが、それを完了するためにホ知りませんでした:
Private Sub GET_TWO_COU()
Dim COUs As Variant
Dim p As Variant
Dim sql As String
Dim STR As New ADODB.Recordset
sql = "SELECT DISTINCT NAME FROM STR_TBL"
STR.Open sql, cnn, adOpenStatic
STR.MoveLast
STR.MoveFirst
COUs = STR.GetRows(STR.RecordCount)
STR.Close
For Each p In COUs
Q1 = "SELECT NAME FROM STR_TBL"
STR.Open sql, cnn, adOpenStatic
Do Until STR.EOF
DoEvents
sql = " UPDATE STR_TBL I" _
& "Set I.N2 = IIf(I.N2 = -99, DLookup(""N1 - N2"" ," _
& """STR_TBL"" , '"[NAME] ='" & p & "' AND N2<> -99""), N2)" _
& "WHERE I.[NAME] IN (SELECT I.[NAME] FROM STR_TBL I" _
& " GROUP BY I.[NAME] HAVING (Count(I.[NAME]) = 2)" _
& "AND (Min(I.N2) <> Max(I.N2))AND (Min(I.N2) = -99 OR Max(I.N2) = -99))"
DoCmd.SetWarnings False
DoCmd.RunSQL sql
DoCmd.SetWarnings True
STR.MoveNext
Loop
STR.Close
NEXT
End Sub
は注:CODEは他の
を更新しました問題は、一致したすべての行に同じ値を追加することです!どうしてそんなことがあるの?ループに何か間違っていますか?
後、私はこの質問は、前の編集にロールバックされなければならないと思っています - あなたは、回答にあなたの質問を更新していますあなたの編集内容を見ない限り、元のコードがどのように見えるかは誰にも分かりません。 (また、提供された回答はループに入るべきではなく、1回のヒットですべてのレコードに適用されます)。 –
私はループなしでそれを行い、それはすべての一致にnull値を割り当てました! – RAKH
あなたの記事の数字を使って私の仕事をしました。あなたはVBAでそれを使用していませんか? SQLを新しいクエリとして追加して実行するだけです。 –