SQL中表中的不同行

时间:2019-07-10 16:53:29

标签: sql sql-server

我有一个表,其中有多个具有相同成员ID的行。我只需要基于2个唯一列的不同行

例如:有100个不同的客户,该表有1000行,因为每个客户都有分配给他的多个城市和细分。 我需要针对这些客户的100个不同的行,具体取决于唯一的细分和城市组合。对于这种组合没有特别的要求,只需要表中的第一个即可。

因此,当前表有点像这样,

enter image description here

希望这会有所帮助。

3 个答案:

答案 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