Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将select with if条件用于oracle中的不同表,而不是编写函数或存储过程?_Oracle - Fatal编程技术网

如何将select with if条件用于oracle中的不同表,而不是编写函数或存储过程?

如何将select with if条件用于oracle中的不同表,而不是编写函数或存储过程?,oracle,Oracle,我的要求是使用if语句从复杂查询中获取报告 如果标志=0我必须执行一组select语句,如果标志=1我必须从另一个表执行另一组select语句 有什么方法可以在查询中实现这一点,而不是编写函数或存储过程 例如: 在SQL中,我这样做 if flag = 0 select var1, vari2 from table1 else select var1, vari2, var3, vari4 from table2 这可能吗???如果SQL中没有,那么就没有—

我的要求是使用if语句从复杂查询中获取报告

如果
标志=0
我必须执行一组select语句,如果
标志=1
我必须从另一个表执行另一组select语句

有什么方法可以在查询中实现这一点,而不是编写函数或存储过程

例如: 在SQL中,我这样做

if flag = 0  
      select var1, vari2 from table1  
else  
      select var1, vari2, var3, vari4 from table2

这可能吗???

如果SQL中没有
,那么就没有
——有
case
表达式,但它不是完全相同的东西

如果有两个表,
t1
t2
,并且
flag
位于标量表
t3
(“标量”表示正好有一列,
flag
,正好有一行,值为
0
1
),您可以随心所欲,但前提是
t1
t2
具有相同的列数和相同的数据类型(而且,尽管语法不要求这样做,但这只有在
t1
t2
中的列具有相同的业务含义时才有意义)。或者,至少,如果您计划仅从
t1
t2
中选择一些列,则您要从任一表中选择的列的数量应相等,具有相同的数据类型,最好具有相同的业务含义

例如:
t1
t2
可能是员工表,可能是针对刚刚合并的两家公司。如果它们都包括
名、姓、出生日期
,并且您只想根据
标志
值从
t1
t2
中选择这三列(即使
t1
有其他列,但在
t2
中不存在),您可以这样做。如果
t1
t2
或两者都不是单个表,而是更复杂查询的结果,则相同。原理是一样的

您可以使用
联合所有
,如下所示:

select t1.col1, t1.col2, ...
from   t1 cross join t3
where  t3.flag = 0
UNION ALL
select t2.col1, t2.col2, ...
from   t2 cross join t3
where  t3.flag = 1
;

如果要生成返回可变列数的普通SQL,则不能。谢谢,但是,union只适用于相同的列数,在我的情况下,第一个查询中有两列,第二个查询中有四列。@EdgarConrado-那么在SQL中就不能这样做。您可能会在PL/SQL或Java或C#或其他语言中执行此操作。