2017-02-20 20 views
-6

假设我有一个这样的表:SQL:显示栏只有当有数据在它

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); 

但它不工作。

+0

提供更好的例子。 –

+0

它不起作用?另外,有点困惑...如果经验> 0,那么只有选择经验栏?或者你的意思是,如果经验<= 0,然后选择其他2列,所以体验只显示在> 0的位置? – David

+0

您使用MySQL或MS SQL Server或Oracle吗?不要标记不涉及的产品。 – jarlh

回答

1

试试这个: -

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

这可能工作:

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

在几乎所有的关系型数据库,你的查询必须返回列的固定电话号码,即相同的列数为所有行。所以你所要求的是不合理的。由于支持锯齿表格,你可能会得到类似于Informix的东西,但这是我能想到的唯一一个。

您的其他选项包括在您的查询中序列化为JSON,或生成XML但这对于此有点高级,并不清楚这是您想要的。

通常我们在前端处理这个,而不是在数据库查询中。

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

你的问题是怎么样,因为返回不同的设定取决于结果列的猫腻是也许不是你想要做什么,你可以直接在代码中做到这一点,而不是从你的SQL投影。

相关问题