2016-09-26 56 views
0

MS Access 2016MS Access VBA/SQL檢查任何兒童

目標,基於子參數的標記記錄;例如:

Cat1 Cat2 
A  1 
A  2 
A  5 
B  3 
B  4 
B  1 
C  3 
C  2 
C  5 

集團內的目標通過檢查是否存在3並標記w /「FBWT」;結果:

Cat1 Cat2 
A  Other 
B  FBWT 
C  FBWT 

我想過創建基於CAT1,更新基礎上,通過CAT1 /2雙然後打印「其他」或「FBWT」迭代值字典,但這將在數以百萬計的記錄跑得那麼我理想的是尋找一個函數,我可以在查詢中運行Cat1上的groupby。

回答

1

使用條件彙總:

select cat1, 
     min(iif(cat2 = 3, 'FBWT' 'Other')) 
from t 
group by cat1; 

它使用MIN()爲有點短切的。字符串是這樣的:'FBWT' < 'Other'

這樣做的一個更正式的方式是比較明確的:

select cat1, 
     iif(sum(iif(cat2 = 3, 1, 0) > 0, 'FBWT', 'Other') 
from t 
group by cat1; 
+0

爲什麼FBWT Schalton

+0

它是基於長度還是按字母順序? – Schalton

+0

我最終只能做到: 從cat1中選擇cat1,min(cat2) – Schalton

0

這樣的事情,但更有效:

Function IsFBwT(ByVal tblName As String, ByVal JVID As String) 
    Dim rs As DAO.Recordset 
    cTblStr = "SELECT [" & tblName & "].[FBwT IND] FROM [" & tblName & "] WHERE ((([" & tblName & "].[Journal Voucher ID])=" & Chr(34) & JVID & Chr(34) & "));" 
    Set rs = CurrentDb.OpenRecordset(cTblStr) 

    IsFBwT = "Other" 
    rs.MoveNext 
    Do Until rs.EOF 
     If rs("FBwT IND").Value = "FBwT" Then 
      IsFBwT = "FBwT" 
      Exit Function 
     End If 
     rs.MoveNext 
    Loop 
End Function 
0

下面是標準的SQL,這意味着它可能會或可能無法正常工作in Accessland:

UPDATE TargetTable t 
    SET t.Cat2 = 'FBWT' 
WHERE EXISTS (SELECT * 
        FROM SourceTable s 
       WHERE s.Cat1 = t.Cat1 
         AND s.Cat2 = 3);