oracle sql的switch case语句决定执行哪个查询

oracle sql的switch case语句决定执行哪个查询,sql,oracle,switch-statement,Sql,Oracle,Switch Statement,根据列值,我需要在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中,则从表A中获取Col1的所有值 如果表B中的类型是特定的,则只获取匹配的值 表A和表B的Col1 所以在这种情况下,如果Typ

根据列值,我需要在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中,则从表A中获取Col1的所有值
  • 如果表B中的类型是特定的,则只获取匹配的值 表A和表B的Col1
所以在这种情况下,如果Type是All,那么结果应该是 R51、R52、R53

如果类型是特定的,那么结果应该是 R52

有什么帮助吗?

试试这个

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'
试试这个

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'
你可以试试这个

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;
你可以试试这个

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;

听起来您需要一个带参数的存储过程<代码>大小写计算表达式并生成值。不起流量控制的作用。我很困惑。为什么不仅仅是:
SELECT*FROM table_b b b internal join table_a on(a.col1=b.col1,b.type='Specific')或b.type='All'
?听起来您需要一个带参数的存储过程<代码>大小写计算表达式并生成值。不起流量控制的作用。我很困惑。为什么不干脆:
SELECT*FROM table_b b b internal join table_a on(a.col1=b.col1,b.type='Specific')或b.type='All'