【发布时间】:2017-12-07 05:55:39
【问题描述】:
我想通过“位置和产品”组合选择最佳销售人员。 第一次我排序和排名,然后我对“位置和产品”求和,然后我想通过“位置和产品”删除除顶级销售人员之外的所有内容,这样查询结果只包含“位置和产品”的顶级销售人员每个“位置和产品”组合的总销售额。
我没有的部分是“select Rank = 1” - 在“From”之后添加“where”子句不起作用:
Select Location, Product, Sales, Salesperson
row_number() OVER (PARTITION BY concat(Location,Product) ORDER BY Sales desc) AS Rank,
Sum(Sales) OVER(PARTITION BY concat(Location,Product)) AS Salesbylocprod
From Table A
【问题讨论】:
-
您将当前查询放在子查询中,然后仅从该子查询中选择 rank = 1 的值(例如
select * from (my current query) as t where rank = 1;)。作为旁注,在PARTITION BY子句中使用CONCAT似乎没有必要;无论如何,您都可以按两列进行分区以获得相同的结果(并且在某些独特的场景中,两个不同位置和产品的串联是相同的,您会避免这种情况)。
标签: sql sql-server