繁体   English   中英

MS Access VBA / SQL检查任何子级

[英]MS Access VBA/SQL check any of children

MS Access 2016

目标,基于子参数的标签记录; 例:

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

目标,在“分组依据”中检查是否存在3,并标记“ FBWT”; 结果:

Cat1    Cat2
 A      Other
 B      FBWT
 C      FBWT

我曾考虑过基于Cat1创建一个字典,该字典基于对Cat1 / 2对的迭代来更新值,然后打印“ Other”或“ FBWT”,但这将在数百万条记录上运行,因此我理想地在寻找一种函数来我可以在运行Cat1上的groupby的查询中运行。

使用条件聚合:

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;

像这样,但是更有效:

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

以下是标准SQL,这意味着它可能在Accessland中工作或可能不工作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM