我有两个名为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似乎没有这方面的解决方案,我如何使用VB6作为我的编程语言来实现这一点,就像@ThorstenKettner所说的那样?
谢谢:)
答案 0 :(得分:1)
您必须构建所有项目组合,以便将这些项目与客户的总数进行比较。
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 | ... ...
这不是SQL的任务。至少不适用于不支持递归查询的DBMS。所以请改用编程语言。即使用Java,C#,无论如何,读取数据,然后通过调用递归函数来获得总数。
更新:您已请求有关该算法的进一步帮助。这是一种可能的方式:
要使这一点变得更复杂:您看到您可以为客户提供多个匹配项,例如:项目A + B和项目B + C + D都与客户总数相匹配。因此,必须为每场比赛完成第5步和以下步骤。另一个递归: - )
一步一步地慢慢地这样做,以免弄糊涂。祝你好运: - )
答案 1 :(得分:0)
不知道你想要什么,如果你有主键或外键,如果你没有,你应该在第一个表中使用你的ControlNo转换你的inv_sldt1中的PK和FK,这样你就可以使用下面我的代码。这样,您还可以通过某些列将表链接在一起。无论如何,如果没有看到这里的所有内容,我会立即查看它并告诉我。
SELECT CustomerID, Date, Quantity
FROM transdt
INNER JOIN inv_sldt1 ON transdt.ControlNo=inv_sldt1.ControlNo
WHERE ItemID = 108