我确定之前已经问过这个问题,所以如果有的话,请帮助引导我朝正确的方向前进,但我的问题是这个。
我有一个SQL查询,可以从2个表中收集销售数据 - CustomerInvoice
和CustomerInvoiceDetail
CustomerInvoice
包含有关发票的通用数据,例如客户名称,地址等,但也包含运费金额。
示例表数据(每个发票代码一条记录):
╔══════════════╦═══════════════╦════════════════════════════╦═════════╗
║ Invoice Code ║ Customer Name ║ Address ║ Freight ║
╠══════════════╬═══════════════╬════════════════════════════╬═════════╣
║ INV-200000 ║ ABC Co ║ 1 Apple Street, FRUITVILLE ║ 20 ║
╚══════════════╩═══════════════╩════════════════════════════╩═════════╝
CustomerInvoiceDetail
包含发票中每个订单项的信息。通常,一张发票上有多个订单项。
示例表数据(每个发票代码多个记录)
╔══════════════╦═════════════╦══════════╦═══════╦══════════╗
║ Invoice Code ║ Part Number ║ Quantity ║ Price ║ ExtPrice ║
╠══════════════╬═════════════╬══════════╬═══════╬══════════╣
║ INV-20000 ║ 50505 ║ 2 ║ 5 ║ 10 ║
╠══════════════╬═════════════╬══════════╬═══════╬══════════╣
║ INV-20000 ║ 51325 ║ 3 ║ 2 ║ 6 ║
╚══════════════╩═════════════╩══════════╩═══════╩══════════╝
这意味着我的JOIN
会产生CustomerInvoice
表的多个结果,在示例中,运费为40美元:2个订单项x $ 20运费。
我的查询如下,将运费金额(表CustomerInvoice
)乘以订单项的数量(在表CustomerInvoiceDetail
上)
我目前得到的是销售价格+(运费* CustomerInvoiceDetail
上的订单项数量)
我需要的是销售价格+一个运费实例(样本情况下,10 + 6 + 20)
SELECT
SUM(cid.ExtPrice + ci.Freight ) AS 'Sales'
FROM CustomerInvoice ci
JOIN CustomerInvoiceDetail cid ON ci.InvoiceCode = cid.InvoiceCode
如果有人有任何建议或资源可以指导我研究这个,我将非常感激!再次感谢。
答案 0 :(得分:0)
您需要在之前汇总:
SELECT (cid.ExtPrice + ci.Freight ) AS Sales
FROM (SELECT SUM(ci.Freight) as Freight
FROM CustomerInvoice ci
) ci CROSS JOIN
(SELECT SUM(cid.ExtPrice) as ExtPrice
FROM CustomerInvoiceDetail cid
) cid;
由于JOIN
,您为每张发票增加了Freight
的行数。
答案 1 :(得分:0)
我相信你可以通过这样的方式来避免子查询:
╔══════════════╦═════════════╗
║ Invoice Code ║ Sales ║
╠══════════════╬═════════════╣
║ INV-20000 ║ 36 ║
╠══════════════╬═════════════╣
║ INV-20001 ║ 100 ║
╠══════════════╬═════════════╣
║ INV-20002 ║ 50 ║
╚══════════════╩═════════════╝
示例输出:
WHERE InvoiceCode='INV-20000'
如果需要,您可以添加<%= if @user.microposts.any? %>
以仅选择一张发票。