помогите написать оконную функцию

Всем привет! есть таблица : введите сюда описание изображения

Есть сущность id_d, которая может быть привязана к сущности id_r или к сущности id_s или может и туда и туда одновременно. Нужно написать оконную ф-цию, которая допускала бы дубликаты, привязанные id_d к id_s, но не допускала бы одновременную привязку. Что должно получиться в итоге:

введите сюда описание изображения

Я написал двухэтажный CTE, но мне не нравится такое решение, может подскажете решение красивее? Спасибо

        with cte as (  select id_d 
         , id_r
         , id_s
         , source
         , ROW_NUMBER() over (partition by id_d,source order by id_s) as row_number1
         ,ROW_NUMBER() over (partition by id_d order by id_s) as row_number2
      from [d_to_r]
               
   
      select *
      
      , (case when row_number1 >1 and row_number2>1 and row_number1 = row_number2 then 1 
              when row_number1 <> ROW_NUMBER2 and ROW_NUMBER2> row_number1 then row_number2 
              else 1
         end) as row_number3
       from cte

Ответы (0 шт):