根据最低优先级从子查询中选择特定行

时间:2016-04-29 20:06:27

标签: tsql

我有一张桌子与客户及其保险提供商。有一个名为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

1 个答案:

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