我有一個表有幾個重複的記錄。所以我想把那些被重複兩次,然後檢查其中只有一個在整個列中的值是-99,所以如果他們兩個都有-99,它將忽略它們,但是如果其中只有一個具有 - 99將比第二個值計算它們並將結果分配給帶-99的結果。訪問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忽略B,因爲計數= 3,但對於它會更新-99行爲:500-300 = 200
---------------------------------------------
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修訂
其他問題在於它會爲所有匹配的行添加相同的值!爲什麼會這樣?我在循環中做錯了什麼?
我想這個問題應該被回滾到以前的編輯後提供的答案,所以沒有人知道你的原始代碼看起來像什麼,除非他們通過你的編輯。 (也提供的答案不應該在一個循環中 - 它在一個命中的所有記錄上工作)。 –
我做了沒有循環,併爲所有匹配分配了一個空值! – RAKH
它使用你的文章中的數字爲我工作。你不是用VBA嗎?只需將SQL作爲新查詢添加並運行即可。 –