我有数据表示例:
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
感谢您的帮助。
答案 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