【问题标题】:Linking to the next recommended Product based on stock availability根据库存情况链接到下一个推荐产品
【发布时间】:2022-10-23 17:02:13
【问题描述】:

我有两个表需要链接在一起,但输出需要考虑切换到第二好的替代品,以防最好的推荐产品缺货。

这是第一个表格,它记录了化学品库存:

然后是第二个表格,其中包含试验方案,并概述了每个样品的最佳化学适合性、次佳和第三佳替代品:

最后,这是所需的输出,它将根据每瓶库存的可用性推荐产品应用。

以红色突出显示的记录只是为了显示推荐需要切换到次优替代品的位置,因为我们的产品 A 缺货。

任何帮助或输入将不胜感激。提前致谢。

【问题讨论】:

  • 这需要 VBA 解决方案 IMO。将 table1 读入一个数组,然后循环 table2。它并不真正适合 SQL。

标签: sql ms-access


【解决方案1】:

您的问题是您的第二个表没有标准化,这使得编写查询变得困难。每当您有名为 1/2/3 的列时,这强烈表明您没有进行规范化,从而限制了数据库的功能并使您自己变得困难。

首先对其进行规范化,并将其存储在单独的查询中。大多数 RDBMS 都有一个 UNPIVOT 查询来规范化,但 Access 只有 UNION 来这样做。

qryTable2标准化

SELECT Sample, BestChem1 As Chem, 1 As Position
FROM Table2
UNION ALL
SELECT Sample, BestChem2 As Chem, 2 As Position
FROM Table2
UNION ALL
SELECT Sample, BestChem3 As Chem, 3 As Position
FROM Table2

确实,这应该是第三张表,因为如果我们将其存储在单独的表中,我们很容易获得第四名、第六名、第 100 名等。

然后,您可以使用有序子查询选择位置最低的化学品。

SELECT Sample, (
   SELECT TOP 1 Location
   FROM Table1 t1 
   INNER JOIN qryTable2Normalized t22 On t1.Chemical = t22.Chem 
   WHERE t22.Sample = t2.Sample AND t1.Stock <> 0 
   ORDER BY t22.Position ASCENDING
) As Recommended
FROM Table2 t2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多