Sql server 2008 选择SQL Server 2008中每月、每年销售额前10名

Sql server 2008 选择SQL Server 2008中每月、每年销售额前10名,sql-server-2008,Sql Server 2008,这是我的查询,它返回286行。我需要修改它以获得每月、每年的前十大销售额。因此,从2008年到2014年,一年中的每个月必须只有10个相应的结果,这些结果必须是最大销售额。任何人都可以帮忙吗?您可以使用分区根据月份和年份将其划分为子集,然后从每个子集中选择前10名作为结果,如下所示: SELECT tr.createdon, st.be_storecountry, st.be_storelocationcategory, st.be_name as

这是我的查询,它返回286行。我需要修改它以获得每月、每年的前十大销售额。因此,从2008年到2014年,一年中的每个月必须只有10个相应的结果,这些结果必须是最大销售额。任何人都可以帮忙吗?

您可以使用分区根据月份和年份将其划分为子集,然后从每个子集中选择前10名作为结果,如下所示:

SELECT tr.createdon, 
       st.be_storecountry, 
       st.be_storelocationcategory,
       st.be_name as storename, 
       br.be_name as brand, 
       SUM(sd.be_amount) as total
from 
       Filteredbe_transaction tr, 
       Filteredbe_store st,
       Filteredbe_salesdetails sd, 
       Filteredbe_brand br
Where
       sd.be_itembrand = br.be_brandid and
       tr.be_storename = st.be_storeid and
       tr.be_transactionid = sd.be_transactionid and
       tr.createdon between '1/1/2008' and '1/1/2014'
group by 
       tr.createdon, st.be_storecountry, st.be_storelocationcategory,
       st.be_name, br.be_name
Order by 
       tr.createdon desc

谢谢你的反馈。它显示筛选错误:未为筛选的筛选器的第7列指定列?定义还是更高版本?定义。关于过滤,我认为问题是我们应该给行_编号一个名称,因此下面提到了rn u,但我添加了行_编号作为rn over,仍然不是很正确的syntaxicallySorry,遗漏了。我现在添加了修复程序。as rn应在整个over条款完成后提交。非常感谢先生,非常感谢!
;with cte as
(
 SELECT tr.createdon, 
   st.be_storecountry, 
   st.be_storelocationcategory,
   st.be_name as storename, 
   br.be_name as brand, 
   SUM(sd.be_amount) as total
from 
   Filteredbe_transaction tr, 
   Filteredbe_store st,
   Filteredbe_salesdetails sd, 
   Filteredbe_brand br
Where
   sd.be_itembrand = br.be_brandid and
   tr.be_storename = st.be_storeid and
   tr.be_transactionid = sd.be_transactionid and
   tr.createdon between '1/1/2008' and '1/1/2014'
group by 
   tr.createdon, st.be_storecountry, st.be_storelocationcategory,
   st.be_name, br.be_name
),
filtered as
(
 select *, 
 row_number() over (partition by year(createdon),month(createdon) order by total desc) rn
from cte)

select * from filtered
where rn <= 10