Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何根据价格确定哪些客户购买了商品_Mysql_Sql_Vb6 - Fatal编程技术网

Mysql 如何根据价格确定哪些客户购买了商品

Mysql 如何根据价格确定哪些客户购买了商品,mysql,sql,vb6,Mysql,Sql,Vb6,我有两个名为transdt和inv\u sldtl的表 transdt表由客户ID和客户购买的物品的总价组成 +----------+-----------+-----------+------------+------------+----------+ | BranchID | TransCode | ControlNo | CustomerID | Date | Amount | +----------+-----------+-----------+-----------

我有两个名为
transdt
inv\u 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\u 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 |
+-----------+-----------+------------+--------+------------+
我假设我们可以根据
transdt
表中的
Amount
inv\u sldtl
表中的
TotalCost
来确定。但是怎么做呢?

编辑:既然SQL似乎没有解决这一问题的方法,我怎么能像@ThorstenKettner所说的那样,使用VB6作为编程语言来实现这一点呢


谢谢:)

不知道您想要什么,也不知道您是否有主键或外键,如果您没有主键或外键,则应在第一个表中设置ControlNo,并在inv_sldt1中转换PK和FK,以便您可以使用类似下面的代码。通过这种方式,您还可以通过某些列将表链接在一起。不管怎么说,没有看到这里的一切都是我在飞行中想到的检查出来,让我知道

SELECT CustomerID, Date, Quantity 
FROM transdt
INNER JOIN inv_sldt1 ON transdt.ControlNo=inv_sldt1.ControlNo
WHERE ItemID = 108

您必须构建所有项目组合,以便将其与客户总数进行比较

pack #1 | pack #2 | sums -----------+------------+----------------- item 1 | item 2+3+4 | 45.00 , 44507.24 item 1+2 | item 3+4 | ... item 1+3 | item 2+4 | ... item 1+4 | item 2+3 | ... item 1+2+3 | item 4 | ... item 2 | item 1+3+4 | ... item 2+3 | item 1+4 | ... ... 包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和后续步骤。另一个递归:-)


    慢慢地,一步一步地做,以免混淆。祝你好运:-)

    不清楚如何连接表。表的设计有缺陷。
    transdt
    应该有一个
    PK
    ,该PK将成为
    inv\u sldtl
    中的
    FK
    ,以便更轻松地加入这些表。请提供更多有疑问的详细信息,您想要什么输出,以及您已经做了什么?表设计似乎不合适。您存储交易中涉及的客户;您存储在交易中购买的物品;但是,您不存储哪个客户购买了哪个项目。现在,您希望通过比较客户总数和项目总数来找出这一点,希望找到一个明确的解决方案。这是否正确?您似乎正在重新编写表,以便获得规范化的表
    transaction(transcode,branchid,controlno,date)
    transaction\u detail(transcode,customerid,itemid,quantity,unitcost,totalcost)
    。我想表中只有很少的交易。您已经开始了这个表的设计,并且(希望)立即发现它是不完整的。现在你想把它弄清楚。如果是这种情况,并且您不是那么有经验的程序员,那么您可能希望手动进行客户/项目匹配,而不是编写复杂的程序。