2017-10-20 1 views
0

列の値に基づいて、Oracle SQLで2つの異なる問合せを実行する必要があります。switch case oracle sqlの実行する文を決定する文

表A

Col1 Col2 
R51 desc_r51 
R52 desc_r52 
R53 desc_r53 

表B

Col1 Type  Username 
R51 All  A 
R52 Specific B 

今私はタイプがすべて表Bである場合、のすべての値を取得

  • クエリを、記述する必要がありますCol1表Aより
  • タイプ表Bの特定の場合には、表Aの のCol1を一致さ値のみを取得し、表B

したがって、この場合のタイプのすべての場合、結果は R51、R52、R53であるべきです

タイプは、特定の場合、結果は R52

どれでも助けすべきですか?あなたはこれを試すことができ

+0

サウンドはパラメータを持つstoreprocedureを必要としています。 'CASE'はexpresionを評価して値を生成します。フローコントロールとして機能しません。 –

+0

私は混乱しています。どうしてですか? 'SELECT * FROM table_b b内部結合table_a a(a.col1 = b.col1 AND b.type = 'Specific')OR 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