另一个选择查询中的 MS Access 选择查询,用于选择另一个字段值
Posted
技术标签:
【中文标题】另一个选择查询中的 MS Access 选择查询,用于选择另一个字段值【英文标题】:MS Access select query inside another select query for selecting another field value 【发布时间】:2021-06-15 12:36:06 【问题描述】:我想不出更好的办法。
我想要做的是从表中获取一些数据,其中字段childitem="NL"
以及选择要显示的字段的复杂部分是,我需要创建新字段Consumption
但该字段值将相同@ 987654327@ 但是当字段processname
前2个字符是SC时,我需要将消耗值设置为另一个字段的childqty
:当前father
(4-SCF-329.. .[id:30]) 是child
到另一个father
(4-FCM-3290...[id:17]) 这确实是child
到另一个father
(4-MCS-329.. ..[id:21])
我的查询:
SELECT tblBom.processname AS Process,
tblBom.child AS [SAP Code],
tblBom.childname AS Material,
iif(LEFT(tblBom.processname,2)="SC",
(SELECT childqty FROM tblBom WHERE tblBom.child like (SELECT father FROM tblBom WHERE child Like tblBom.father)),
tblBom.childqty
) AS consumption,
tblBom.childrate AS [Landed Rate],
tblBom.childrate * tblBom.childqty As RATE
FROM tblBom
WHERE tblBom.childitem Like "NL";
我希望第 5 行代码中的最后一个 tblBom.father
成为主要查询的父亲。有没有办法让它在某处或任何地方成为变量。如果我将其更改为“4-SCF*”,它将起作用。
My Table
Excel Detailed View:
橙色:单词“SC”的条件检查 黄色:需要替换的值 绿色:将放在黄色上的值 ReddishPink:查询绿色值的路径Desired OutPut
【问题讨论】:
也许:LIKE [enter some value] & "*"
。或者为变量输入引用一个表单控件。
问题是,我无法预测father
字段中的内容。我想要的只是获取主 SELECT 查询的 father
并将其传递给子子 SELECT 查询。
对我来说仍然太混乱了。请显示所需的查询输出和源表的所有重要部分。特别是我们需要看到父亲的全部价值。
我可以把这个表作为 xlsx 文件分享给你吗,我是从另一个复杂的大表中得到这个表的。因此,当我运行主查询时,tblBom 中的值会发生变化。这就是为什么我需要在这里的主查询中进行复杂的 2 个子查询
gofile.io/d/x4JXoH :第一张纸是 tblBom,第二张纸是我正在寻找的输出。我用颜色突出显示了一些我正在使用查询的单元格。
【参考方案1】:
我的解决方案需要两个计算字段和两个查询。计算的字段是 UltimateFather 和消费。我们需要两个查询,因为这个问题并不能保证孩子的父亲有一个像“NL”这样的 childitem 值。因此,在计算每个孩子的 UltimateFather 之前,我们不能丢弃任何数据。 Ultimate Father 基于将公共函数 GetUltimateFather 添加到代码模块。获取 UltimateFather 是一个递归问题,因此请参阅此处以获取有关查询中递归函数的评论: Is it possible to create a recursive query in Access?
'calculated fields
UltimateFather: GetUltimateFather([child])
consumption: IIf([processname] Like ("SC*"),DLookUp("childqty","tblBom","father = '" & [UltimateFather] & "'"),[childqty])
Public Function GetUltimateFather(childid As String) As String
Dim currentchild, hasfather As String
currentchild = childid
'string variables make sure to escape and delimit strings properly'
hasfather = Nz(DLookup("father", "tblBom", "child = '" & currentchild & "'"), "")
If hasfather = "" Then
GetUltimateFather = currentchild
Else
GetUltimateFather = GetUltimateFather(hasfather) 'get next father in chain
End If
End Function
【讨论】:
以上是关于另一个选择查询中的 MS Access 选择查询,用于选择另一个字段值的主要内容,如果未能解决你的问题,请参考以下文章
从 MS-Access 中联合选择查询中的 SQLite 语法错误