2014-01-15 4 views
2

데이터베이스에없는 데이터 집합에서 누락 된 필드를 채울 Oracle 쿼리를 작성하려고합니다. 이다변경 상수가있는 Oracle 쿼리를 작성하십시오.

, 나는

+----+-----+-----+ 
|Name|Name2|Name3| 
+----+-----+-----+ 
|A |1 |  | 
+----+-----+-----+ 
|B |1 |  | 
+----+-----+-----+ 
|C |2 |  | 
+----+-----+-----+ 
|Z |39 |  | 
+----+-----+-----+ 
|... |... |... | 
+----+-----+-----+ 
|... |... |... | 
+----+-----+-----+ 
|... |... |... | 
+----+-----+-----+ 
|QF |893 |  | 
+----+-----+-----+ 

이름이 데이터베이스에 고유 한, 그리고 데이터를해야합니다.

Name2는 고유하지 않으며 데이터베이스 내부와 외부에 모두 존재합니다.

Name3이 (가) 알려지지 않았고 고유 한 것이 아니며 Name2 (Name2와 Name3 간의 매핑이 일대일 임)에 정의되어 있으며 데이터베이스에 있습니다.

SQL에서 단일 쿼리는 다음과 같이 모델링 할 수

,

SELECT MY_TABLE.Name3 FROM MY_TABLE WHERE MY_TABLE.Name2='1' 

그리고 그 쿼리 내 데이터의 처음 두 행으로 반환대로 배치 알 것입니다.

그럼 내가 작성하고 개별 선택 문의 수천을 실행하고 문 NAME2가 반복하지만 많은 시간을 반환 무엇을 복사 할 필요 나머지 행이 비록

SELECT MY_TABLE.Name3 FROM MY_TABLE WHERE MY_TABLE.Name2='2' 

을 위해 그것을 반복 할 수있다.

누락 된 열을 채우기 위해 단일 SELECT 문을 작성하는 방법이 있습니까? 이름 열이 데이터베이스에없고 쿼리 작성에 걸리는 시간이 염려되지 않는다는 것을 명심하십시오.

이상적인 쿼리는 이미 잘 데이터 세트를 반환

SELECT Name, MY_TABLE.Name2, MY_TABLE.Name3 FROM MY_TABLE WHERE 
    (MAGICALLY_SET Name = 'A' AND 
    Name2 = '1') OR 
    (MAGICALLY_SET Name = 'B' AND 
    Name2 = '1') OR 
    (MAGICALLY_SET Name = 'C' AND 
    Name2 = '2') 
    ... 
    (MAGICALLY_SET Name = 'QF' AND 
    Name2 = '893'); 

이런 일이 될 것입니다.

+----+-----+-----------------+ 
|Name|Name2|Name3   | 
+----+-----+-----------------+ 
|A |1 |returned_value1 | 
+----+-----+-----------------+ 
|B |1 |returned_value1 | 
+----+-----+-----------------+ 
|C |2 |returned_value54 | 
+----+-----+-----------------+ 
|Z |39 |returned_value87 | 
+----+-----+-----------------+ 
|... |... |...    | 
+----+-----+-----------------+ 
|... |... |...    | 
+----+-----+-----------------+ 
|... |... |...    | 
+----+-----+-----------------+ 
|QF |893 |returned_value439| 
+----+-----+-----------------+ 

나는 상수 이름 값을 변경하고 이중을 사용하는 select 문을 작성하려고 시도했지만 올바르게 추적하고 있다고 생각하지 않습니다.

이름이 테이블에있는 경우 쿼리를 작성할 수 있음을 알고 있습니다. 그러나 새 테이블을 만들고 Name/Name2 데이터를 모두 삽입 할 수는 없습니다.

아이디어가 있으십니까?

+0

당신이 검색 할 덜 이상적인 솔루션보다 함께 종료 '이름'열의 데이터? 또한, 어떻게'Name'이'Name2'와 함께 갈지 결정할 수 있습니까? – Sebas

+0

CSV 파일입니다. – Kobaj

+0

먼저 모든 csv를 테이블에로드하는 방법은 무엇입니까? 오라클은 이것을 위해 매우 편리한 로더를 가지고 있습니다. 그것은 한 줄입니다. – Sebas

답변

0

나는 곳에서에서 * 하나의 선택에 싸여, 그러나 제대로 출력 한 수

SELECT 'A' AS Name, Name2, Name3 FROM MY_TABLE WHERE NAME2 = '1' UNION ALL 
SELECT 'B' AS Name, Name2, Name3 FROM MY_TABLE WHERE NAME2 = '1' UNION ALL 
SELECT 'C' AS Name, Name2, Name3 FROM MY_TABLE WHERE NAME2 = '2' UNION ALL 
... 

,

Name, Name2, Name3 
A  1  returned_value1 
B  1  returned_value1 
C  2  returned_value54 
... 
관련 문제