计算客户的总销售额

时间:2016-04-08 10:32:44

标签: sql sql-server

我正在编写一个脚本,以便向我返回MS SQL中客户的总销售额。

但是,当我输入脚本时,我没有返回正确的金额。我相信它可能与我加入我的表的方式有关,或者我错过了某个SUM函数。无论哪种方式,我都会非常感激我们的帮助。 编辑:抱歉忘记提及它必须在@CustomerName中接受一个变量以与不同的客户一起使用

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

如果需要,我也包括了我的数据库图表。再次感谢!

数据库图表:

enter image description here

3 个答案:

答案 0 :(得分: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 c.CustomerName=@CustomerName) as q0

程序按名称选择目标客户的所有金额。

答案 1 :(得分: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

答案 2 :(得分:0)

有关查询问题的说明:

  1. 您加入了tblProduct tblCustomer,这根据架构
  2. 是不可能的
  3. 您必须加入tblSoHeader customerID,然后加入tblSOLine,然后加入tblProduct
  4. 最后,因为您需要给定客户,customerName必须在where条款中
  5. 请尝试以下查询

    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 CustomerName=@CustomerName
        group by c.CustomerName