我有两个表叫做transdt
和inv_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
表中的transdt
和TotalCost
表中的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/