我有一个表,其中有多个具有相同成员ID的行。我只需要基于2个唯一列的不同行
例如:有100个不同的客户,该表有1000行,因为每个客户都有分配给他的多个城市和细分。 我需要针对这些客户的100个不同的行,具体取决于唯一的细分和城市组合。对于这种组合没有特别的要求,只需要表中的第一个即可。
因此,当前表有点像这样,
希望这会有所帮助。
答案 0 :(得分:1)
使用row_number()
select * from (select *,row_number() over(partition by memberid order by sales) rn
from table_name
) a where a.rn=1
答案 1 :(得分:1)
方便的sql-server top(1) with ties
语法
select top(1) with ties t.*
from table_name t
order by row_number() over(partition by memberid order by sales)
由于您没有特定的选择确切行的要求,因此任何列都将在order by
处执行,因此它也可以为空
select top(1) with ties t.*
from table_name t
order by row_number() over(partition by memberid order by (select null))
答案 2 :(得分:-1)
最简单的方法是使用ROW_NUMBER()OVER(GROUP BY ...)语法。您不需要使用顺序,因为您希望每个成员只有一个任意行。
由于只需要预期的数据,而不需要Row_Number的值,因此请确保详细说明返回的字段,如下所示:
SELECT
MemberId,
city,
segment,
sales
FROM (
SELECT *
ROW_NUMBER() OVER (GROUP BY MemberId) as Seq
FROM [Status]
) src
WHERE Seq = 1