请原谅我的长篇大论,但这简洁明了,因为我可以解决这个问题。我有一张表格,其中包含销售的销售数据以及每笔销售的销售日期,地域,客户信息等。我希望按销售价值返回过去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个地区。我知道每个地区都有完整的数据集。
答案 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