2017-10-20 52 views
0

En fonction de la valeur de la colonne, j'ai besoin d'exécuter 2 requêtes différentes dans Oracle sql.basculer l'instruction case d'oracle sql pour décider quelle requête exécuter

Tableau A

Col1 Col2 
R51 desc_r51 
R52 desc_r52 
R53 desc_r53 

Tableau B

Col1 Type  Username 
R51 All  A 
R52 Specific B 

Maintenant je dois écrire une requête, où

  • si le type est dans le tableau B, obtenir toutes les valeurs de Col1 du tableau A
  • si le type est spécifique dans le tableau B, se seules valeurs qui sont correspondant à Col1 du tableau A et le tableau B

Donc dans ce cas, si le type est tout le résultat devrait être R51, R52, R53

Si le type est spécifique, le résultat devrait être R52

Toute aide?

+0

son comme vous avez besoin d'un storeprocedure avec des paramètres. 'CASE' évalue expresion et génère une valeur. Ne fonctionne pas comme un contrôle de flux. –

+0

Je suis confus. Pourquoi pas simplement: 'SELECT * FROM table_b b jointure interne table_a a on (a.col1 = b.col1 ET b.type = 'Spécifique') OU b.type = 'All''? –

Répondre

0

Essayez cette

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

Vous pouvez essayer.

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; 

Sortie:

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

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