2017-10-20 1 views
0

컬럼 값에 따라 Oracle sql에서 2 가지 다른 쿼리를 실행해야합니다.스위치 케이스 oracle sql을 실행하여 실행할 쿼리를 결정하십시오.

  • 경우 유형 모든 표 B에

    Col1 Type  Username 
    R51 All  A 
    R52 Specific B 
    

    가 지금은 쿼리를 작성할 필요가

    Col1 Col2 
    R51 desc_r51 
    R52 desc_r52 
    R53 desc_r53 
    

    표 B,의 모든 값을 얻을 Col1 표 A로부터

  • 타입은 표 B의 특정 경우 유형 모두, 결과이어야 R51, R52, R53의 경우, 만 표 A의 COL1 매칭되는 값이 경우 그래서

표 B를 얻을 유형은 특정 경우

, 결과는 는

어떤 도움 R52

해야 하는가? 당신이 시도 할 수

+0

소리, 매개 변수와 함께 storeprocedure이 필요합니다. 'CASE'는 expresion을 평가하고 값을 생성합니다. 흐름 제어로 작동하지 않습니다. –

+0

나는 혼란 스럽다. 'SELECT * FROM table_b b 내부 조인 table_a a (a.col1 = b.col1 AND b.type ='Specific ') 또는 b.type ='All''입니까? –

답변

0

select A.col1 
    from A 
where exists (select 1 from B where type = 'All') 
union 
select B.col1 
    from A, B 
where A.Col1 = B.Col1 and 
     B.Type = 'Specific' 
0

을보십시오.

SELECT 'SELECT ' 
     ||CASE 
      WHEN TYPE = 'All' THEN (SELECT Listagg(col1, ',') 
              within GROUP (ORDER BY col1) 
            FROM tablea) 
      WHEN TYPE = 'Specific' 
       AND EXISTS (SELECT 1 
          FROM tablea a 
          WHERE a.col1 = b.col1) THEN b.col1 
     END 
     ||' FROM TABLEA;' as select_statement 
FROM tableb b; 

출력 : 당신 같은

SELECT_STATEMENT 
SELECT R51,R52,R53 FROM TABLEA; 
SELECT R52 FROM TABLEA; 

http://sqlfiddle.com/#!4/89872/11/0