2016-09-01 4 views
0

테이블의 각 열에 고유 값을 가져와야합니다. 예를 들어 대한 :Oracle - 각 열의 고유 값 (별개 수가 아님)

Table1 
Info1 info2 info3 
A   D  F 
B   D  G 
B   E  H 
        I 

내가 원하는 결과는이 쿼리는 일치하지 않을 whereever null를 돌려

Table1 
Info1 info2 info3 
A   D  F 
B   E  G 
        H 
        I 

입니다. 거기에 어떤 대안

Select A.Info1,B.Info2,C.Info3 from 
(Select distinct Info1 from table1) A full outer join 
(Select distinct Info2 from table1) B on A.info1=B.Info2 full outer join 
(Select distinct Info3 from table1) C on A.info1=C.Info3 
+0

예상 결과에서 조인의 논리는 무엇입니까? 어떻게 행을 만들겠습니까? – Plirkee

+0

아래에 답변을 붙여 넣었습니다. 어떤 열의 값 사이에도 관계가 필요하지 않습니다. 각자에게서 유일한. – kten

답변

0

당신은 어떤 JOIN을 수행 할 수있는 기반으로 필드를 생성하기 위해 ROW_NUMBER를 사용할 수 있습니다

select info1, info2, info3 
from (
    select info1, row_number over (order by info1) as rn 
    from (Select distinct Info1 from table1) t1) x1 
full outer join (
    select info2, row_number over (order by info2) as rn 
    from (Select distinct Info2 from table1) t2 
) x2 on x1.rn = x2.rn 
full outer join (
    select info3, row_number over (order by info3) as rn 
    from (Select distinct Info3 from table1) t3 
) x3 on x2.rn = x3.rn 
+0

이 논리는 나에게 맞는 것 같습니다. 하지만 실행하려고하면 구문 오류가 발생합니다. – kten

0

내가 확실하지 오전이 최선의 선택 인 경우. 그러나 다른 답변들은 기대했던 결과를 정확하게 나타내지 못했습니다. 쿼리가

select Info1,Info2,Info3 from 
(Select rownum as rA,Info1 from (select distinct Info1 from Tabl1 order by Info1)) A full outer join 
(Select rownum as rB,Info2 from (select distinct Info2 from Tabl1 order by Info2)) B on A.rA=B.rB full outer join 
(Select rownum as rC,Info3 from (select distinct Info3 from Tabl1 order by Info3)) C on A.rA=C.rC 
order by A.rA; 

했다 아래 여기 캐치 출력이 없기 때문에 경기의 새 행을 추가하지 않도록 첫 번째 행은 고유 값의 최대 수를 가져야한다고하지만이있다.

관련 문제