我有一张桌子与客户及其保险提供商。有一个名为Priority的列,范围为1-8。我希望能够在我的“主表”中选择最低优先级的保险我有一个提供费用,日期,医生等的查询。我需要一个子查询,我可以加入Client_ID上的主查询优先级不始终以1.保险表是关系的多方面
Row# Client_id Insurance_id Priority active? 1 333 A 1 Y 2 333 B 2 Y 3 333 C 1 N 4 222 D 6 Y 5 222 A 8 Y 6 444 C 4 Y 7 444 A 5 Y 8 444 B 6 Y
答案应该是
Client_id Insurance_id Priority 333 A 1 222 D 6 444 C 4
答案 0 :(得分:0)
我能够实现我认为您要求非常轻松地利用SQL ROW_NUMBER()
功能的结果:
declare @tbl table
(
Id int identity,
ClientId int,
InsuranceId char(1),
[Priority] int,
Active bit
)
insert into @tbl (ClientId, InsuranceId, [Priority], Active)
values (1, 'A', 1, 1),
(1, 'A', 2, 1),
(1, 'B', 3, 1),
(1, 'B', 4, 1),
(1, 'C', 1, 1),
(1, 'C', 2, 0),
(2, 'C', 1, 1),
(2, 'C', 2, 1)
select Id, ClientId, InsuranceId, [Priority]
from
(
select Id,
ClientId,
InsuranceId,
[Priority],
ROW_NUMBER() OVER (PARTITION BY ClientId, InsuranceId ORDER BY [Priority] desc) as RowNum
from @tbl
where Active = 1
) x
where x.RowNum = 1
结果:
(8 row(s) affected)
Id ClientId InsuranceId Priority
----------- ----------- ----------- -----------
2 1 A 2
4 1 B 4
5 1 C 1
8 2 C 2
(4 row(s) affected)