TSQL - 在组和Max组中获取项目不重复

时间:2018-02-07 01:46:53

标签: sql-server tsql duplicates

我有数据表示例:

Declare @tb1 Table(ItemId int , GroupDuplicateId int, GroupType nvarchar(10))

Insert Into @tb1 Values(1,1,'IN'),(1,1,'VN'),(1,2,'IN'),(1,3,'IN'),(1,2,'VN'),(1,3,'VN'),(1,3,'SK')
Insert Into @tb1 Values(2,1,'IN'),(2,1,'VN')

select * from @tb1
Order by ItemId, GroupDuplicateId, GroupType

现在,我想让1个组中的项目。 示例:ItemId 1具有GroupDuplicateId:1,2,3。我们需要其中一个。          ItemId 2满意,因为只有1组。

Declare @tbResult1 Table(ItemId int , GroupDuplicateId int, GroupType nvarchar(10))

Insert Into @tbResult1 Values(1,1,'IN'),(1,1,'VN')  
Insert Into @tbResult1 Values(2,1,'IN'),(2,1,'VN')
select * from @tbResult1

- 2。相同1.但是,我们需要第3组。它有3组类型:IN,VN,SK。

    Insert Into @tbResult2 Values(1,3,'IN'),(1,3,'VN'),(1,3,'SK') -- Have max in Group
    Insert Into @tbResult2 Values(2,1,'IN'),(2,1,'VN')

select * from @tbResult2

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这就是你要找的。?

Declare @tb1 Table(ItemId int , GroupDuplicateId int, GroupType nvarchar(10))

Insert Into @tb1 Values(1,1,'IN'),(1,1,'VN'),(1,2,'IN'),(1,3,'IN'),(1,2,'VN'),(1,3,'VN'),(1,3,'SK')
Insert Into @tb1 Values(2,1,'IN'),(2,1,'VN')

/*
select * from @tb1
Order by ItemId, GroupDuplicateId, GroupType */

;with cte as (
select *,row_number()over(partition by itemid,GroupType order by itemid,GroupDuplicateId)rn from @tb1
)
select * from cte where rn=1