1

이 일부 데이터 확인하기 위해 선택을 쓰려고내가 relationships_split 라는 테이블이

create table relationships_split 
(rel id int , 
rel_type_id varchar (20), 
rel_type_group_id varchar(20), 
rel_type_class_id varchar(20), 
contact_id int, 
isprimaryrelationship int, 
dtadded datetime, 
dtmodified datetime, 
opposite_contact_id int) 

insert into relationships_split 
(rel_id,rel_type_id,rel_type_group_id,rel_type_class_id,contact_id,isprimaryrelationship,dtadded,dtmodified,opposite_contact_id) 
VALUES 
    (29715, 2, 1, 2, 2138306, 0, '2012-10-26 11:08:55.230', '2012-10-26 11:08:55.230',  2138153), 
    (29715, 2, 1, 2, 2138306, 0, '2012-10-26 11:08:55.230', '2012-10-26 11:08:55.230', 2138153), 
    (29715, 2, 1, 2, 2138306, 0, '2012-10-26 11:08:55.230', '2012-10-26 11:08:55.230', 2138153), 
    (47574, 2, 1, 2, 1719969, 1, '2012-12-27 17:12:46.980', '2012-12-27 17:12:46.980', 1710276), 
    (47574, 2, 1, 2, 1719969, 1, '2012-12-27 17:12:46.980', '2012-12-27 17:12:46.980', 1710276), 
    (47574, 2, 1, 2, 1719969, 1, '2012-12-27 17:12:46.980', '2012-12-27 17:12:46.980', 1710276), 
    (47574, 2, 1, 2, 1719969, 1, '2012-12-27 17:12:46.980', '2012-12-27 17:12:46.980', 1710276) 

create table contacts 
(id int, 
fullname varchar (900) 
) 

insert into contacts 
(id,fullname) 
    values 
(1719969,'Carrie Smith'), 
(2138306,'Stephen Rosenthal') 

(아마도 순위 방식)와 뷰 구조입니다 - 내가 primaryrelationship을 선택하면 = 1은이 내가 무엇을하고 나는 생각은 매우 잘못된 :

SQL 바이올린에 또한

with ids as (select id from contacts) 


select 
z.contact_id ,z.rel_id, 
rank() over(partition by z.rel_id order by case when isprimarrelationship =1 then 1 else 0 end) as r 
from 
relationships_split z inner join ids 
on z.contact_id = z.id 
where r = 1 

답변

1

귀하의 질의는 아주 가깝습니다. order bydesc이 필요합니다. 그리고 열을 참조하려면 하위 쿼리가 필요합니다.

select rs.contact_id, rel_id 
from (select rs.contact_id, rs.rel_id, 
      rank() over (partition by rs.rel_id 
          order by (case when isprimaryrelationship =1 then 1 else 0 end) desc 
         ) as seqnum 
     from relationships_split rs 
    ) rs 
where seqnum = 1 
:

다음은 조금 그것을 정리