Sql 将价格结果与折扣相加的标量函数

Sql 将价格结果与折扣相加的标量函数,sql,tsql,Sql,Tsql,我在弄清楚如何将一个标量函数组合在一起时遇到了一些问题,它有3个产品对应一个订单,只有2个产品的折扣为.15。正如你所看到的,我对这一点很陌生,但我试图理解。谢谢你的帮助 代码: 关于标量函数应该如何组合,这可能有点离题,但我得到了一个总数,但它没有将折扣单独应用于项目。 再次感谢你的帮助 如果折扣是固定货币金额,如$5.00,则应使用: sum((od.unitprice-od.discount) * od.quantity) sum(od.unitprice * (1-od.discoun

我在弄清楚如何将一个标量函数组合在一起时遇到了一些问题,它有3个产品对应一个订单,只有2个产品的折扣为.15。正如你所看到的,我对这一点很陌生,但我试图理解。谢谢你的帮助

代码:

关于标量函数应该如何组合,这可能有点离题,但我得到了一个总数,但它没有将折扣单独应用于项目。
再次感谢你的帮助

如果折扣是固定货币金额,如$5.00,则应使用:

sum((od.unitprice-od.discount) * od.quantity)
sum(od.unitprice * (1-od.discount) * od.quantity)
如果表示为类似.15的比例,则应使用:

sum((od.unitprice-od.discount) * od.quantity)
sum(od.unitprice * (1-od.discount) * od.quantity)
请注意,这里使用的是聚合函数,而不是标量函数

此外,您应该从查询中删除
distinct
。不同的重复数据消除会消除整行。您不能将其应用于结果中的单个列,因此查询中的括号
distinct(sum(…)
没有意义。在这种情况下,将不会有重复的行,因为您是按orderID分组的,所以distinct无效


只有当您有特定的理由这样做时,才应该使用
distinct

尝试一下,如果您有任何疑问,请告诉我

#如果在应用数量因素后提到折扣

select o.order_id,sum(od.unit_price*od.quantity-od.discount) as value  
from
order o
left join
orderdetails od
on o.order_id = od.order_id
group by o.order_id;
#如果提到的折扣是针对单个项目的

    select o.order_id,sum((od.unit_price-od.discount)*od.quantity) as value  
    from
    order o
    left join
    orderdetails od
    on o.order_id = od.order_id
    group by o.order_id;
希望这有帮助:)