sql - 减少 SQL Server 中的查询冗余

标签 sql sql-server

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/

相关文章:

sql - 为hsqldb创建架构时出现语法错误

c# - 将 SQL 中的 Yes/No/Null 转换为 DataTable 中的 True/False

java.sql.SQLException 无效的对象名称

c# - 使用 C# 进行 SQL Server 备份

mysql - 列出表中唯一值的计数

sql - 在 Impala 中可以一次删除多个 View 吗

sql - 如何从数据库中选择 100 个下一个序列值的列表

sql - 更改 SQL 中表的架构名称

sql - 查询查找所有 FK 约束及其删除规则 (SQL Server)

sql-server - SQL Server 中触发器的替代方案