【问题标题】:SQL:Show column only if has data in itSQL:仅当其中有数据时才显示列
【发布时间】:2017-07-09 12:15:44
【问题描述】:

假设我有这样一张桌子:

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 的地方?
  • 您使用的是 MySQL 还是 MS SQL Server 或 Oracle?不要标记未涉及的产品。
  • 试试:SELECT name,age,experience FROM emp_info WHERE experience > 0

标签: mysql sql sql-server oracle11g


【解决方案1】:

试试这个:-

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

【讨论】:

    【解决方案2】:

    这可能有效:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:
        SELECT name, age, NULLIF(experience, 0) from emp_info
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-04-01
          • 2019-03-20
          • 1970-01-01
          • 2013-04-04
          • 2013-10-25
          • 2021-12-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多