2016-04-08 12 views
1

私は、MS SQLの顧客の合計販売金額を返却するスクリプトを作成しています。顧客の合計売上金額の計算

ただし、スクリプトを入力するときに正しい金額が返されていません。私はそれが私のテーブルに加わったやり方とすることができると信じている、または私はどこかのSUM関数を逃している。いずれにしても、私は何か助けを切られて大いに感謝されます。 編集:申し訳ありませんが、それは必要であれば、私は、同様に私のデータベースダイアグラムが含まれている

create procedure TotalSalesValue @CustomerName varchar(30) 
AS 
SELECT top 1 @CustomerName, sum(quantity * SellingPrice) amount 
from tblCustomer c 
join tblProduct p 
    on c.CustomerID=p.ProductID 
join tblSOLine so 
    on so.ProductID = p.ProductID 
group by c.CustomerName 
order by amount desc 

異なる顧客と一緒に使用することが@CustomerNameで変数に取るために持って言及するのを忘れてしまいました。再度、感謝します!

データベースダイアグラム:

enter image description here

+0

以下のクエリを試してみてくださいSELECT top 1 c.CustomerName ... '、つまり、' @ 'なしで? – jarlh

答えて

0

はそう

create procedure TotalSalesValue @CustomerName varchar(30) 
AS 
    SELECT q0.CustomerName, sum(q0.amount) as 'amount' FROM (
     SELECT c.CustomerName, sum(so.quantity * p.SellingPrice) as 'amount' 
     from tblCustomer c 
     join tblProduct p 
     on c.CustomerID=p.ProductID 
     join tblSOLine so 
     on so.ProductID = p.ProductID 
     where [email protected]) as q0 

手順名前でターゲットとする顧客のためのすべての金額を選択しますように。

+1

なぜサブクエリを使用してこれを記述しますか? –

+0

同じ名前の顧客が多いため –

+0

サブクエリを削除することにしました。ここでは、顧客名がユニークであると仮定して、ここでは必要ありません –

0

あなたはSELECTのテーブルが欠落している、あなたのアカウントに、すべての販売注文を取るためにordreにtblSOHeaderに参加する必要があり

create procedure TotalSalesValue @CustomerName varchar(30) 
AS 
SELECT top 1 @CustomerName, sum(SO.quantity * p.SellingPrice) amount 
from tblCustomer c 
inner join tblSOHeader h ON h.CustomerID=c.CustomerID 
inner join tblSOLine so ON so.SOHeaderID=h.SOHeaderID 
inner join tblProduct p ON so.ProductID=p.ProductID 
group by c.CustomerName 
order by amount desc 
0

クエリとの問題についての説明:

  1. tblProducttblCustomerを参加させていましたが、スキーマによっては不可能です
  2. tblSoHeaderに参加する必要があります。あなたはcustomerNamewhere

でなければならないこと、特定の顧客のためにそれを必要とするので、その後は最後にtblProduct

  • に、その後tblSOLineにそれを参加し、 `

    create procedure TotalSalesValue @CustomerName varchar(30) 
    AS 
        SELECT CustomerName, sum(so.quantity * p.SellingPrice) amount 
        from tblCustomer c 
         join tblSoHeader H on c.CustomerID = H.CustomerID 
         join tblSOLine so on so.SoHeaderID = H.SoheaderID 
         join tblProduct p on p.ProductID = so.ProductID 
        where [email protected] 
        group by c.CustomerName 
    
  • 関連する問題