2009-07-16 7 views
0

숨바꼭질들,는 CASE 문을

아무도 오라클 데이터베이스 10g의 하위 쿼리 좀 도와주십시오 수를 대체 할 오라클 부속을 사용하십니까? 두 번째 테이블의 다른 열 값으로 첫 번째 테이블의 열 값을 추출해야합니다.

SELECT 
CASE WHEN A.column1 = 'A' THEN 'aaa' 
WHEN A.column1 = 'B' THEN 'bbb' 
....... 
WHEN A.column1 = 'X' THEN 'xxx' 
ELSE 'bad' END AS COLUMN1, A.* 
FROM TRANSACTION_TABLE A, CATEGORY_TABLE B 
WHERE A.column1 IS NOT NULL 
AND A.column1 <> ' ' 

이 우아한 접근하지, 그래서 나는 다음과 같은 CATEGORY_TABLE B에서 부속을 사용하려고 해요 : : 그래서

SELECT A.column1, A.* 
FROM TRANSACTION_TABLE A, CATEGORY_TABLE B 
WHERE A.column1 IS NOT NULL 
AND A.column1 = B.column_b_1 
AND A.column1 <> ' ' 
AND A.column1 IN (SELECT B.column_b_1_descr FROM CATEGORY_TABLE B 
WHERE B.FIELDNAME = 'column1' AND A.column1 = B.column_b_1) 

, 내가 어떤을 얻을 수 나는 현재이 문을 사용 결과는 하위 쿼리를 사용하여 여러 조건에 대해 CASE를 계속 사용하지 않으려면 A.column1 값을 B.column_b_1_descr의 설명 값으로 바꾸기를 원합니다. 나는 어떤 의견든지 평가할 것입니다. 감사

+0

분명히하기 위해, column1이 'A'일 때 출력 행의 'column1'필드에 'aaa'문자열이 필요합니다. * 'aaa'라고하는 열의 값이 아니겠습니까? –

답변

1

내가 질문을 오해하고있어하지 않는 한 ...

CATEGORY_TABLE: 
    name | value 
    A  aaa 
    B  bbb 
    C  ccc 
... 


SELECT B.value AS COLUMN1, A.\* 
FROM TRANSACTION\_TABLE A, CATEGORY\_TABLE B 
WHERE A.column1 = B.name 

또는 절, 필요한 내부 이후되지

SELECT t2.value as COLUMN1, t1.\* 
FROM TRANSACTION\_TABLE t1 
INNER JOIN CATEGORY\_TABLE t2 ON t1.column1 = t2.name; 

가 자동으로 null 값이나와 행을 제외 가입 맞지 않는다.

+2

'나쁜'값을 유지하려면이 값을 OUTER JOIN으로 바꾸고 SELECT의 첫 번째 부분을 COLUMN1, ...으로 선택 합치기 (t2.value, 'bad')로 변경하십시오. –