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