过去4年每年按地区返回顶级客户并对SQL Server 2008进行总结

时间:2015-06-10 15:34:40

标签: sql-server-2008

请原谅我的长篇大论,但这简洁明了,因为我可以解决这个问题。我有一张表格,其中包含销售的销售数据以及每笔销售的销售日期,地域,客户信息等。我希望按销售价值返回过去4年中每个地区的前10名客户。如果客户出现多年前十位,则应将这些年份的总价值加在一起,并按总价值排序。因此,如果所有4年中所有前10名客户都相同,那么我只会得到10个结果。如果所有4年中所有前10位客户都不同,我会得到40个结果。我希望查询在今天的日期阅读,所以我不必更新我每年新年搜索的年份。即使从哪里开始我也遇到了麻烦,是的,我是SQL新手。

该表是“预订”。我已将字段类型和一些示例数据放在下面:

[BKS_BookDate] (datetime), [BKS_TerritoryCodes] (nvarchar(255)), [BKS_CUS_RecordID]  (uniqueidentifier), [BKS_BookAmt] (money).

示例数据:

BKS_BookDate BKS_TerritoryCodes BKS_CUS_RecordID BKS_BookAmt

'2006-09-07 17:00:00.000' 'MF - USA'    'EF928A2E-1A71-4231-BFA9-0B1D2E903469'  '1190.00'

'2006-09-15 12:45:00.000'   'TT - South'    '68BAFD37-59F5-4985-8F3E-E440E3A0C3EE'  '1716.00'

'2006-09-15 12:45:00.000'   'TT - South'    '68BAFD37-59F5-4985-8F3E-E440E3A0C3EE' '864.00'

'2006-09-15 12:45:00.000'   'TT - South'    '68BAFD37-59F5-4985-8F3E-E440E3A0C3EE'  '822.00'

'2006-09-15 12:45:00.000'   'TT - South'    '68BAFD37-59F5-4985-8F3E-E440E3A0C3EE'   '760.00'

'2006-09-15 12:45:00.000'   'TT - South'    '68BAFD37-59F5-4985-8F3E-E440E3A0C3EE'  '0.00'

更新#3 在Mihir的帮助下,我做了以下更改:

Set Nocount On;

Declare  @Today         Date
        ,@LastSales     Int

Select   @Today = Getdate()
        ---- Last 4 year including current year, if excluding current year then use -4
        ,@LastSales = Datepart(Year, Dateadd(Year, -3, @Today))


;With Sales_CTE As
(
    Select   s.*
,Row_Number() Over(Partition By s.BKS_TerritoryCodes 
Order By s.BKS_TerritoryCodes,s.SaleYear,s.Amount Desc) As TopSales
    From    (
            Select   b.BKS_TerritoryCodes
                    ,Datepart(Year, b.BKS_BookDate) As SaleYear
                    ,b.BKS_CUS_RecordID
                    ,SUM(b.BKS_BookAmt) As Amount
            From    Bookings As b With (Nolock)
            Where   Datepart(Year, b.BKS_BookDate) >= @LastSales
            Group By b.BKS_TerritoryCodes
                    ,Datepart(Year, b.BKS_BookDate)
                    ,b.BKS_CUS_RecordID
            ) As s
)

Select   sc.BKS_TerritoryCodes
        ,sc.SaleYear
        ,CUS_CorpName
        ,MAX(sc.Amount) as Total_Sales
From    Sales_CTE As sc With (Nolock)

join Customer on CUS_RecordID = BKS_CUS_RecordID

Where   sc.TopSales <= 10
Group By sc.BKS_TerritoryCodes
        ,SaleYear
        ,CUS_CorpName
Order By sc.SaleYear Desc

我仍然存在以下问题:1。预订金额似乎只是每个客户的最大销售额,当需要是所有预订的总和时。这样,当每个地区的前10名被退回时,它是全年销售额的前十名。 2.此外,出于某种原因,我只获得了2012年的完整数据集,然后是2014年的1个地区。我知道每个地区都有完整的数据集。

2 个答案:

答案 0 :(得分:0)

试试这个

<?php include("wp-load.php"); ?> 

  <div class="popup-overlay">
  <?php  
  $args = array(
           'post_type' => 'portfolio',
           );
  $loop=new WP_Query;
  $count=1;
  if($loop->have_posts()):whiile(have_posts()) :the_post();  
  ?>
  <div class="popup-box <?php echo $count; ?> ">
      <div class="inner-box">        
      </div>
  </div> 
<?php
$count;
endwhile;
endif;
?>
</div>

答案 1 :(得分:0)

解决方案的最终答案如下(再次感谢Mihir):

Set Nocount On;

Declare  @Today         Date
        ,@LastSales     Int

Select   @Today = Getdate()
        ---- Last 4 years including current year, if excluding current year then use -4
        ,@LastSales = Datepart(Year, Dateadd(Year, -4, @Today))


;With Sales_CTE As
(
Select   s.*
        ,Row_Number() Over(Partition By s.SalesRegion, s.SaleYear Order By s.Amount Desc) As TopSales
From    (
            Select   b.SalesRegion
                    ,Datepart(Year, b.BookingDate) As SaleYear
                    ,CUS_CorpName
                    ,SUM(b.DeliveryBooking) As Amount
            From    ettBookingsKPIDetails As b With (Nolock)
            join Customer on CUS_CustomerID = Customer
            Where   Datepart(Year, b.BookingDate) >= @LastSales 
            Group By b.SalesRegion
                    ,Datepart(Year, b.BookingDate)
                    ,CUS_CorpName
        ) As s
)

Select   sc.SalesRegion
        ,sc.SaleYear
        ,sc.CUS_CorpName
        ,sc.Amount as Total_Sales
From    Sales_CTE As sc With (Nolock)

Where   sc.TopSales <= 10 and SalesRegion is not NULL

Order By sc.SaleYear Desc