2011-04-20 6 views
3

복합 기본 키가있는 테이블이 있습니다. 이것은 상호 참조 테이블이고 내가 ID2 일치 어디에 쿼리를 작성하는 것을 시도하고이복합 기본 키를 사용하여 테이블 쿼리

Table 
ID Relationship    ID2 
1  Spouse     10 
2  Employee     20 
2  Former Employee   20 
3  Former Employee   30 
4  Child     40 

처럼 보이는, 당신은 동일한 ID에 대한 직원 및 전 직원 모두가

ID Relationship    ID2 
2  Employee     20 
2  Former Employee   20  

어떤 도움을 주셔서 감사합니다! Oracle, SQL ServerPostgreSQL에서

+1

사용하는'RDBMS'? – Quassnoi

+0

해당 ID에 대한 모든 레코드를 선택하고 응용 프로그램에서 피벗하는 것이 가장 좋습니다. 특히 각 ID마다 필요한 열의 수가 다를 수 있기 때문에 특히 그렇습니다. – HLGEM

답변

2

:

SELECT * 
FROM (
     SELECT t.*, 
       COUNT(*) OVER (PARTITION BY id, id2) AS cnt 
     FROM mytable t 
     WHERE relationship IN ('Employee', 'Former Employee') 
     ) q 
WHERE cnt = 2 

크로스 플랫폼 버전 :

SELECT t.* 
FROM (
     SELECT id, id2 
     FROM mytable 
     WHERE relationship IN ('Employee', 'Former Employee') 
     GROUP BY 
       id, id2 
     HAVING COUNT(*) = 2 
     ) q 
JOIN mytable t 
ON  t.id = q.id 
     AND t.id2 = q.id2 
     AND t.relationship IN ('Employee', 'Former Employee') 
+0

감사합니다. Quassnoi !! 오라클과 나는 두 번째 쿼리를 시도했다. 그것은 내가 원하는 데이터를 가져 오지만 다른 ID2를 가진 직원이나 전직 직원이있는 ID를 가져옵니다 – Cindy

+0

@Cindy : 테이블 정의를 올리시겠습니까? – Quassnoi

+0

필자는 약간 수정하여 T.id2 = q.id2를 추가했으며 현재 작동합니다. – Cindy

0
select * from table where ID2 in (
    select ID2 from table where count(ID2) > 1) t 
order by ID2 
+0

나는 다만 직원 및 이전 직원에게 그것을 거르기 위하여보고있다 – Cindy

관련 문제