Sql 添加排名字段并根据条件返回前3名数据库
谢谢你调查我的问题 我希望它返回的排名,并有它的基础上的日期,组,销售计数,以便它可以给排名前3名。例如,2014年1月2日,BIGGroup1A中的John分别卖出100和10。因此,在产品10中排名为1,在产品7中排名为2。在2014年1月2日的同一天,他将55和55分为两个不同的组出售,因此它们都应该是1。我填补了排名的其余部分,以符合我所追求的逻辑 我的桌子是Sql 添加排名字段并根据条件返回前3名数据库,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,谢谢你调查我的问题 我希望它返回的排名,并有它的基础上的日期,组,销售计数,以便它可以给排名前3名。例如,2014年1月2日,BIGGroup1A中的John分别卖出100和10。因此,在产品10中排名为1,在产品7中排名为2。在2014年1月2日的同一天,他将55和55分为两个不同的组出售,因此它们都应该是1。我填补了排名的其余部分,以符合我所追求的逻辑 我的桌子是 Date Name Group ProductName SellCount 1/2/2014
Date Name Group ProductName SellCount
1/2/2014 John BigGroup1A Product7 10
1/2/2014 John BigGroup1A Product10 100
1/2/2014 John BigGroup1B Product2 55
1/2/2014 John Group1A Product1 55
1/3/2014 John Group1B Product6 5
1/3/2014 John Group1C Product9 44
1/3/2014 John Group1C Product4 55
1/3/2014 John LargeGroup1A Product5 77
1/4/2014 John LargeGroup2A Product8 25
1/5/2014 John LargeGroup2B Product12 660
1/6/2014 John MediumGroup2A Product11 50
1/7/2014 John MediumGroup2A Product3 55
我希望结果是:
Date Name Group ProductName SellCount Rank
1/2/2014 John BigGroup1A Product7 10 2
1/2/2014 John BigGroup1A Product10 100 1
1/2/2014 John BigGroup1B Product2 55 1
1/2/2014 John Group1A Product1 55 1
1/3/2014 John Group1B Product6 5 1
1/3/2014 John Group1C Product9 44 2
1/3/2014 John Group1C Product4 55 1
1/3/2014 John LargeGroup1A Product5 77 1
1/4/2014 John LargeGroup2A Product8 25 1
1/5/2014 John LargeGroup2B Product12 660 1
1/6/2014 John MediumGroup2A Product11 50 1
1/7/2014 John MediumGroup2A Product3 55 1
我很欣赏sql中的解决方案,我是新手,希望每个人都能提供帮助。你可以使用RANK来实现你想要的
Select *,
RANK() OVER (PARTITION BY DATE,GROUP ORDER BY SELLCOUNT)AS RANK
from Table T
PARTITION BY根据日期和组将结果集划分为多个组。ORDER BY确保排名基于所创建组中的SELLCOUNT 您应该能够像这样使用排名窗口功能:
select * from (
select
*,
rank = rank() over (partition by date, [group] order by date, [group], sellcount desc)
from table1
) t
where rank <= 3
内部查询根据您的规范为每一行分配一个等级,外部查询过滤等级大于3的行
请参见示例。SQL Server 2008有一个排名函数。2014年6月1日的行不应该有排名1,因为它是当天唯一的项目吗?是的,你说得对。我刚刚编辑了它。我尝试了SQL,所有内容都返回排名1。是否有其他函数或过滤器可以在我上面提供的数据库字段中为我提供结果?谢谢你的帮助help@Nguyenal07此排名函数将根据partition子句将数据分为多个组,因此,只要一个组中有多个具有不同sellcount的项目,这些项目就应该获得不同的排名。你确定这些项目不同吗?看看示例SQL Fiddle,它给出了不同的等级。它不起作用,因为如果我在同一天有3个销售计数,其中两个是55,它会将两者都标记为2。如果一个是二,另一个是三,我如何让他们自动分配?例如,它看起来是这样的:销售计数3排名2,销售计数3排名2,销售计数20,排名1-@jpw@Nguyenal07我不确定我是否理解,但是如果您想要的是返回四行,列号为1、2、2,3如果两个产品具有相同的值,那么您可能希望使用密集等级。看看这个例子,我为BigGroup1B更改了产品:谢谢!这就是我想要的,也许我需要添加另一个标准,现在就应该这样做了。我感谢你的帮助