另一个选择查询中的 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 语法错误

MS Access 中的条件选择语句

MS Access:组合框重新查询

如何将 MS-Access 选择查询的结果保存在 C#.net 中的变量中?

数据表视图中的 MS Access 表单交叉表查询

如何让 MS-Access 为我的查询选择不同/正确的执行计划