2017-10-20 78 views
0

基於列值,我需要在Oracle sql中執行2個不同的查詢。切換oracle語句的case語句以決定執行哪個查詢

表A

Col1 Col2 
R51 desc_r51 
R52 desc_r52 
R53 desc_r53 

表B

Col1 Type  Username 
R51 All  A 
R52 Specific B 

現在我需要編寫一個查詢,其中

  • 如果類型是所有表B,得到所有的值來自表A的Col1
  • 如果類型是表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')或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