Sql server 2008 选择SQL Server 2008中每月、每年销售额前10名
这是我的查询,它返回286行。我需要修改它以获得每月、每年的前十大销售额。因此,从2008年到2014年,一年中的每个月必须只有10个相应的结果,这些结果必须是最大销售额。任何人都可以帮忙吗?您可以使用分区根据月份和年份将其划分为子集,然后从每个子集中选择前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
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