SELECT
invoiceNo AS Bill_No,
SUM(ISNULL((OFI.[New Quantity] * OFI.[Unit Sell Price]),0)) AS Amount,
SUM(ISNULL(((OFI.[New Quantity] * OFI.[Unit Sell Price]) + FBP.[Packing/Delivery Charges] + FBP.[Miscellaneous Charge]) * (FBP.[Additional Discount Percent] / 100), 0)) AS Discount
FROM
dbo.[Final Payment Bill] FBP
JOIN
dbo.[Order] o ON o.finalPaymentBill_invoiceNo = FBP.invoiceNo
JOIN
dbo.[Ordered Food Item] OFI ON o.[Order Number] = OFI.Order_orderNo
GROUP BY
FBP.invoiceNo
正如在查询中看到的那样,我不得不为计算编写两次相同的求和函数。有没有其他方法可以让我不必再写一遍?
PS:我不确定提出这个问题的正确方式。
最佳答案
我相信你可以为此使用子查询
select
invoiceNo as Bill_No,
sum(FinalPrice) as Amount,
sum(ISNULL((FinalPrice + FBP.[Packing/Delivery Charges] + FBP.[Miscellaneous Charge]) * (FBP.[Additional Discount Percent] / 100) ,0)) as Discount
from dbo.[Final Payment Bill] FBP
join dbo.[Order] o
on o.finalPaymentBill_invoiceNo = FBP.invoiceNo
join (select Order_orderNo, (OFI.[New Quantity] * OFI.[Unit Sell Price]) FinalPrice from dbo.[Ordered Food Item]) OFI
on o.[Order Number] = OFI.Order_orderNo
group by FBP.invoiceNo
和 CTE 以提高可读性
with OFI as
(
select Order_orderNo, (OFI.[New Quantity] * OFI.[Unit Sell Price]) FinalPrice
from dbo.[Ordered Food Item]
)
select
invoiceNo as Bill_No,
sum(FinalPrice) as Amount,
sum(ISNULL((FinalPrice + FBP.[Packing/Delivery Charges] + FBP.[Miscellaneous Charge]) * (FBP.[Additional Discount Percent] / 100) ,0)) as Discount
from dbo.[Final Payment Bill] FBP
join dbo.[Order] o
on o.finalPaymentBill_invoiceNo = FBP.invoiceNo
join OFI
on o.[Order Number] = OFI.Order_orderNo
group by FBP.invoiceNo
关于sql - 减少 SQL Server 中的查询冗余,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48090567/