将细节数据与求和数据相结合

时间:2013-07-15 15:48:44

标签: sql sql-server tsql

我正在尝试为我的公司创建一份销售业绩分析报告,该报告包含两组销售目标。

  1. 现有客户的销售目标 - 每个月都标识有为每个客户设定目标的帐号。每个客户都被分配到销售代表,以便我们可以轻松计算该代表的现有销售目标总数。存储在自己的表中。

  2. 新业务的销售目标 - 这是每个销售代表在本财政年度必须赢得多少新业务的一次总付数字。存储在自己的表中,用列标识月份,年份,代表和给出金额。

  3. 我的ETL脚本为每个月的每个客户创建/更新一个新的表行,显示客户的目标销售额,目标和差异。

    我遇到的问题是如何处理新业务,因为这些数字是全年的一次性付款。如果我只是将它们联系起来,那么当我总结它而不是真正的总数时,我将得到一个目标,它是新客户数量和数量的倍数。

    有没有人有类似的经验或项目,这种聚合导致了他们的问题?

    所以在我的表Sales_Targets中我有列:

    Company, Account Code, Target Type, Target, Cal Year, Cal Month, Month End
    

    使用数据:

    BWA  P001          Large        40000   2013      7          2013-07-31
    

    在我的Other_Targets表格中,我有相同的信息减去帐户代码,因为我们还不知道哪些帐户是新的。此表中的target type设置为“new”。

    丹尼

1 个答案:

答案 0 :(得分:1)

听起来你想要获得账户,每个账户的实际和目标。然后,你想要再获得两个数字: 1.销售代表的“其他目标” 2.此销售代表获得的新业务总数

在Sql Server中,您可以在外部select子句中嵌套Select子查询。您可以嵌套另一个来计算新客户的数量。最后,您可以将这两者分开,以获得分配给该帐户的销售代表的平均新客户目标。

它看起来类似于下面的查询,但假设结构为see this Fiddle for more detail

select Account_Code, Cal_YYYYMM, Act_Sales, Sales_Rep
 , coalesce((select sum(Target) from Sales_targets ST 
    where ST.Account_Code=A.Account_Code 
      and ST.Cal_YYYYMM=A.Cal_YYYYMM
      and ST.Sales_Rep=A.Sales_Rep    
   ),0) SPECIFIC_TARGET

 , coalesce((select sum(Target) from Other_targets ST 
    where ST.Cal_YYYYMM=A.Cal_YYYYMM
      and ST.Sales_Rep=A.Sales_Rep    
   ),0) SALESMAN_OTHER_TARGET
 , coalesce((select count(*) from Actual_Sales A2 
    where A2.Cal_YYYYMM=A.Cal_YYYYMM
      and A2.Sales_Rep=A.Sales_Rep   
      and NOT EXISTS 
             (select 1 
              from Sales_Targets ST2
               where ST2.Account_Code=A2.Account_Code 
                 and ST2.Cal_YYYYMM=A2.Cal_YYYYMM
                 and ST2.Sales_Rep=A2.Sales_Rep  
              )
   ),0) SALESMAN_NEW_ACCOUNTS

 , coalesce((select sum(Target) from Other_targets ST 
    where ST.Cal_YYYYMM=A.Cal_YYYYMM
      and ST.Sales_Rep=A.Sales_Rep    
   ),0)
 / coalesce((select count(*) from Actual_Sales A2 
    where A2.Cal_YYYYMM=A.Cal_YYYYMM
      and A2.Sales_Rep=A.Sales_Rep   
      and NOT EXISTS 
             (select 1 
              from Sales_Targets ST2
               where ST2.Account_Code=A2.Account_Code 
                 and ST2.Cal_YYYYMM=A2.Cal_YYYYMM
                 and ST2.Sales_Rep=A2.Sales_Rep  
              )
   ),0) SALES_AVG

from Actual_Sales A