我有两个表叫做transdtinv_sldtl
transdt表由客户ID和客户购买的商品的总价组成。

+----------+-----------+-----------+------------+------------+----------+
| BranchID | TransCode | ControlNo | CustomerID |    Date    | Amount   |
+----------+-----------+-----------+------------+------------+----------+
|        1 |        48 |       469 |       1170 | 2017-05-01 | 295.00   |
|        1 |        48 |       469 |       1185 | 2017-05-01 | 44257.24 |
+----------+-----------+-----------+------------+------------+----------+

inv_sldtl包含项目id、单位成本、数量和总成本。
+----------+-----------+--------+-----------+------------+----------+----------+-----------+
| BranchID | TransCode | ItemID | ControlNo |    Date    | Quantity | UnitCost | TotalCost |
+----------+-----------+--------+-----------+------------+----------+----------+-----------+
|        1 |        48 |    108 |       469 | 2017-05-01 | 1.00     | 45.00    | 45.00     |
|        1 |        48 |    736 |       469 | 2017-05-01 | 10.00    | 25.00    | 250.00    |
|        1 |        48 |    622 |       469 | 2017-05-01 | 4.00     | 280      | 1120.00   |
|        1 |        48 |    500 |       469 | 2017-05-01 | 4.00     | 10784.31 | 43137.24  |
|          |           |        |           |            |          |          |           |
+----------+-----------+--------+-----------+------------+----------+----------+-----------+

假设两个表的结果在同一个事务中,该事务由ControlNo确定。
有什么办法可以这样输出吗?
+-----------+-----------+------------+--------+------------+
| ControlNo | TransCode | CustomerID | ItemID |    Date    |
+-----------+-----------+------------+--------+------------+
|       469 |        48 |       1170 |    108 | 2017-05-01 |
|       469 |        48 |       1170 |    736 | 2017-05-01 |
|       469 |        48 |       1185 |    622 | 2017-05-01 |
|       469 |        48 |       1185 |    500 | 2017-05-01 |
+-----------+-----------+------------+--------+------------+

我假设我们可以根据Amount表中的transdtTotalCost表中的inv_sldtl来确定它。但是怎么做呢?
编辑:由于SQL似乎没有解决这个问题的方法,我怎样才能像@ThorstenKettner所说的那样,使用VB6作为编程语言来实现这个目标呢?
谢谢:)

最佳答案

你必须建立所有的项目组合,以便与客户的总数进行比较。
包#1 |包#2 |和
-----------+------------+-----------------
项目1 |项目2+3+4 | 45.00,44507.24
项目1+2 |项目3+4 |。。。
项目1+3 |项目2+4 |。。。
项目1+4 |项目2+3 |。。。
项目1+2+3 |项目4 |。。。
项目2 |项目1+3+4 |。。。
项目2+3 |项目1+4 |。。。
...
这不是SQL的任务。至少对于不支持递归查询的DBMS来说不是这样。所以改用编程语言。也就是说,使用Java,C#,随便什么,读取数据,然后通过调用递归函数得到总数。
更新:您已请求有关算法的进一步帮助。以下是一种可能的方法:
这里有一组n个客户(11701185)。
这里有一组m个项目(108500622736)。
以总数最低的客户为例,这里的客户是1170和295.00。
查找与价格匹配的项目组合。你可以使用递归函数调用,一旦价格太高就停止。所以你很快就会得到108=45.00,736=250.00和108+736=295.00。只有最后一个组合是匹配的。
将客户从客户集合中移除。从项集中移除项。
继续执行步骤3,直到完成为止。
要使这稍微复杂一点:您可以看到一个客户有多个匹配项,例如项目a+B和项目B+C+D都与客户总数匹配。因此,每一场比赛都必须完成第5步和以下步骤。另一个递归:-)
慢慢来,一步一步,以免搞糊涂。祝你好运:-)

关于mysql - 如何根据价格确定哪个客户购买了商品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44877592/

10-16 15:37