Sql 选择结果在连接时相乘

Sql 选择结果在连接时相乘,sql,sql-server,Sql,Sql Server,我使用的是一个SQL Server数据库,它的订单表包含一个名为invoice_id的外键,该属性属于invoice表。另外,我还有另一个名为receipt的表,其中还包括oice_idandamount_paid`属性 可以将多个项目分配给同一发票客户可以一次下多个订单,也可以将多个收据分配给同一发票客户可以对同一发票进行不同的付款,例如,他们可以支付50%,然后再支付其余款项 因此,我面临的问题是,当我试图以订单id为条件从收据表中选择支付的总金额时,结果将根据具有相同发票id的订单数量相乘

我使用的是一个SQL Server数据库,它的订单表包含一个名为invoice_id的外键,该属性属于invoice表。另外,我还有另一个名为receipt的表,其中还包括oice_idandamount_paid`属性

可以将多个项目分配给同一发票客户可以一次下多个订单,也可以将多个收据分配给同一发票客户可以对同一发票进行不同的付款,例如,他们可以支付50%,然后再支付其余款项

因此,我面临的问题是,当我试图以订单id为条件从收据表中选择支付的总金额时,结果将根据具有相同发票id的订单数量相乘

例如,客户A一次下了三个订单,每个订单的成本是100美元,发票上应该是300美元,并且他已经支付了该发票。现在如果我查询收据表中的付款金额,结果将是900美元300美元*3个订单,这显然是不正确的

我被困在这个问题上,我相信我的数据库逻辑中有一些错误,所以请给我你的建议来解决这个问题,如果逻辑不正确,应该怎么处理数据库

下面是我用来获取结果的查询:

select sum(r.amount_paid), o.invoice_id from RECEIPT r, INVOICE i, ORDER o
where r.invoice_id = i.invoice_id
and o.invoice_id = i.invoice_id
group by o.invoice_id;
请试试这个:

SELECT SUM(r.amount_paid), r.invoice_id FROM RECEIPT r
JOIN INVOICE i ON r.invoice_id = i.invoice_id
JOIN ORDER o ON r.invoice_id = o.invoice_id  AND r.order_id = o.order_Id
GROUP BY r.invoice_id;

下面是对您可能会对数据库提出的三个稍有不同的问题的三个答案

每张发票支付的金额 如果你想得到每张发票的总金额,你所需要的就是

SELECT   SUM(Amount_Paid) Total_Paid, 
         Invoice_ID
FROM     Receipt
GROUP BY Invoice_ID
每次订单支付的金额 如果您想知道每个订单支付的总金额,那么在您的数据模型中,这是不太可能的。若一张发票上有三张订单,而发票上只支付了部分款项,那个么就并没有办法分辨哪些订单已支付,哪些订单未支付

您需要一些额外的数据结构来指示如何将付款应用于发票中的订单,例如分配表或拆分表

与一个或多个订单相关的发票支付的金额 另一方面,如果您想知道包含一个或多个订单ID的发票已收到多少付款,可以这样写:

SELECT   SUM(Amount_Paid) Total_Paid, 
         Invoice_ID
FROM     Receipt
WHERE    Invoice_ID IN (SELECT Invoice_ID 
                        FROM   Order 
                        WHERE  Order_ID IN (1,2,3,4))  --Edit these IDs for your specific case
GROUP BY Invoice_ID

请注意,上面的查询都不需要任何连接,因此不需要乘法:

您能给我们显示您调用的查询以获得结果吗?请参阅上面的帖子,我已经用query@abdullahdibastanks@abdullahDibas更新了它,我已经尝试过了,仍然存在相同的问题。