标量函数,总计带有折扣的价格结果

时间:2017-05-06 04:19:12

标签: sql tsql

我遇到了一些麻烦,弄清楚如何将标量函数组合在一起,其中包含1个订单的3个产品,只有2个产品适用于它们的折扣.15。正如你所看到的,我对此很陌生,但试图理解。谢谢你的帮助。

代码:

select distinct(sum (od.UnitPrice * od.Quantity - od.Discount)), o.OrderID
from Orders o
join OrderDetails od
on o.OrderID = od.OrderID
where o.OrderID = 10250
group by o.OrderID

关于如何将标量函数组合在一起可能会有所不同,但我得到一个总数,但它并没有单独对项目应用折扣。 再次感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

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

sum((od.unitprice-od.discount) * od.quantity)

如果它表示为.15之类的比例,则应使用:

sum(od.unitprice * (1-od.discount) * od.quantity)

请注意,您在此处使用的内容称为聚合函数,而不是标量函数。

此外,您应该从查询中删除distinct。不同的重复删除整行。您无法将其应用于结果中的单个列,因此查询distinct( sum(...) )中的括号毫无意义。在这种情况下,不会有重复的行,因为您按orderID进行分组,因此distinct不起作用。

只有在您有特定原因时才应使用distinct

答案 1 :(得分:0)

试试这个,如果您有任何疑问,请告诉我。

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

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;

希望这会有所帮助:)