oracle sql的switch case语句决定执行哪个查询
根据列值,我需要在Oracle sql中执行两个不同的查询 表Aoracle 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
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
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'
?