SQL:仅在包含数据的情况下显示列

时间:2017-02-20 09:29:56

标签: mysql sql sql-server oracle11g

假设我有一个这样的表:

name | age | experience
abc  |  18 | 0
def  |  19 | 0
efg  |  20 | 0

我想只在任何一个值大于零时选择体验列。 在这种情况下,我的SQL查询应仅返回姓名和年龄,而不是经验。

如果让我们说“efg”的经验大于0,那么查询应该返回姓名,年龄和经验。 我试过以下查询

SELECT  EXISTS (SELECT name,age,experience FROM emp_info )
   AND NOT
   EXISTS (SELECT experience FROM emp_info WHERE experience=0 );

但它没有用。

4 个答案:

答案 0 :(得分:1)

试试这个: -

IF ((select max(experience)FROM emp_info) > 0)
    SELECT name,age,experience FROM emp_info
ELSE
    SELECT name,age FROM emp_info

答案 1 :(得分:1)

在几乎所有关系数据库中,您的查询都必须返回固定数量的列,即所有行的列数相同。所以你要求的是不合理的。由于表格支持参差不齐,你可能会在Informix上使用这样的东西,但这是我唯一能想到的。

您拥有的其他选项包括在您的查询中序列化为JSON,或生成XML,但这有点先进,并且不清楚这是您想要的。

通常我们会在前端处理此问题,而不是在数据库查询中处理。

答案 2 :(得分:1)

SELECT name, age, NULLIF(experience, 0) from emp_info

您的问题有点棘手,因为根据结果返回不同的列可能不是您想要做的,您可以直接从代码中执行,而不是从SQL投影中执行。

答案 3 :(得分:0)

这可能有效:

if(experience > 0)
  begin
    SELECT name,age,experience FROM emp_info
  end
else
  begin
    SELECT name,age FROM emp_info
  end