2017-05-06 9 views
0

スカラー関数をどのように組み合わせて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 

これはおそらく方法オフスカラー関数は、一緒に配置する必要がありますが、私は合計を取得する方法については、それは個別の項目に割引を適用していないです。 もう一度お世話になりました!

答えて

0

割引はあなたが使用する必要があります$ 5.00のように、固定された通貨額である場合:

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

それは0.15のような割合として表現されている場合は、あなたが使用する必要があります。

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

。なお、ここで使用しているのは、集合関数と呼ばれ、スカラー関数ではありません。

また、クエリからdistinctを削除する必要があります。 Distinctは行全体を重複排除します。結果の1つの列には適用できないため、クエリdistinct(sum(...))のかっこは無意味です。この場合、orderIDでグループ化しているので、重複行はありません。そのため、distinctは何の効果もありません。

具体的な理由がある場合は、distinctのみを使用してください。

0

これを試してみてください。質問がある場合はお知らせください。言及した割引が1つのアイテムの

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; 

希望の場合は、割引が

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; 

#数量係数を適用した後に言及した場合

#これは役立ちます:)

関連する問題