[英]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.