Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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
Sql 如何根据列条件动态选择列表_Sql_Oracle - Fatal编程技术网

Sql 如何根据列条件动态选择列表

Sql 如何根据列条件动态选择列表,sql,oracle,Sql,Oracle,我想写一个查询,它允许我根据条件动态获取列数,这就是我要寻找的: select column1,column2,column3 , columncond from table , if : columncond = 'true' select column4,column5 , columncond from table ,if : columncond = 'false' 如何在一个查询中创建此逻辑并根据columncond的值(true或false)动态获取结果,我使用的是oracle 提

我想写一个查询,它允许我根据条件动态获取列数,这就是我要寻找的:

select column1,column2,column3 , columncond from table , if : columncond = 'true'
select column4,column5 , columncond from table ,if : columncond = 'false'
如何在一个查询中创建此逻辑并根据columncond的值(true或false)动态获取结果,我使用的是oracle


提前感谢。

您不能有一个返回不同行和不同列数的查询;单个查询的所有行必须具有相同的列数和类型

您可以做的是编写一个查询,返回固定数量的列,但根据某些条件,不需要的列中包含NULL

例如:

SELECT CASE WHEN columncond = 'true' THEN column1 ELSE column4 END,
       CASE WHEN columncond = 'true' THEN column2 ELSE column5 END,
       CASE WHEN columncond = 'true' THEN column3 ELSE NULL END,
       columncond
  FROM your_table 
在哪里使用

select column1,column2,column3 , columncond 
from table 
where columncond = 'true';

select column4,column5 , columncond 
from table  
where columncond = 'false';

OP似乎希望在单个查询中的不同行中有不同数量的列;编辑我对clarifyHi的回答,谢谢你的回复。我通过选择所有列,并在我的客户端中创建一些if-else来解决我的问题。解析查询时需要知道列数;不能有一个SQL查询改变选择列表中的列数。(您可以使用动态SQL,它延迟解析,或者让您的客户机动态地构建查询;但我认为这不是您想要的)。调用者如何知道需要多少列以及如何处理它们?你能包括伪空列,这样选择列表就有相同数量(和类型)的列吗?嗨,alex,谢谢你的回答,我通过选择所有列解决了我的问题,并在我的客户机中创建了一些if-else。