2016-04-29 3 views
0

У меня есть таблица с клиентами и их страховыми компаниями. Существует столбец «Приоритет», который варьируется от 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

я смог достичь результатов, которые я думать вы просите довольно легко используя функцию 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) 
+0

мне нужно пересмотреть PARTITION и номер строки, но я не думаю, что этот пример дает ответ на мой вопрос. Мне нужен самый низкий приоритет, когда политика активна. В вашем примере у вас есть только 2 клиента, поэтому мне нужны строки 1 и 7. Один приоритет для каждого клиента. спасибо, я рассмотрю ваш ответ еще. – bob

+0

После некоторого исследования ROW_NUMBER() я понял, что происходит, когда вы объединили его с PARTITION, и это действительно решает мою проблему. То, что меня смутило в вашей таблице RESULTS, было несколько строк CLIENTID. Я хотел только одну строку на одного клиента с самым низким приоритетом. В любом случае, спасибо, что это отлично работало, когда я применил его к моим фактическим данным. – bob

+0

Хорошо, вы могли бы отметить это как ответ на свою проблему? ;) –