【问题标题】:Can I select multiple columns depending on a SELECT CASE?我可以根据 SELECT CASE 选择多个列吗?
【发布时间】:2011-03-09 16:24:59
【问题描述】:

根据下面的 SELECT CASE,我想在一个 WHEN 中显示 两个 单独的列。这可能吗?

下面的两条注释掉的行是我想要的。我确信这是我所缺少的非常简单的东西。实际上,存在语法错误。

select 
    person.FirstName,
    person.LastName,
    CASE 
        --WHEN substatus is not null then 'HasSubstatus', null
        --else null, 'DoesNotHaveSubstatus'
        WHEN substatus is not null then 'HasSubstatus'
        else null
    end
from Person person

【问题讨论】:

  • 你为什么要同时标记mysql和sybase?
  • 我删除了 mysql 标签,抱歉。
  • 您是否真的需要两列,它们都传达相同的确切数据?也许您的报告引擎有奇怪的要求或其他什么,但这是我开始时会引发危险信号的事情之一。
  • @Tom H:我也同意问题中提供的示例的这个要求似乎很奇怪。但它比我实际需要的(数据转换)要简单得多,而且我不确定 Select Case 多列是否可能 - 现在我知道基于 Thomas 的回答 :)

标签: sql sybase


【解决方案1】:

您不能在单个 Case 表达式中执行此操作,因为 Case 表达式返回单个值。您必须使用两个 Case 表达式。

Select  person.FirstName
    , person.LastName
    , Case When substatus is not null Then 'HasSubstatus' End As [HasSubstatus]
    , Case When substatus is null Then 'DoesNotHaveSubstatus' End As [DoesNotHaveSubstatus]
From Person person

【讨论】:

    【解决方案2】:

    你不能。

    如果您的意思是要将相同的条件逻辑应用于 2 列,或者如果您的意思是在一种情况下它应该返回两列而在另一种情况下,将其作为单独的查询,则需要重复 case 语句一栏。

    【讨论】:

      【解决方案3】:

      您可以使用 if()isnull() 来实现(此语法仅适用于 mySql

      select 
          person.FirstName,
          person.LastName,
          IF( ISNULL(substatus),'HasSubstatus', null ) AS DoesHave,
          IF( ISNULL(substatus),null,'DoesNotHaveSubstatus'  ) AS DoesNotHave,
      from Person person
      

      【讨论】:

      • -1 语法错误:函数“ISNULL”的参数数量错误
      • @VoodooChild,抱歉使用了 mysql 语法.. @thomas 答案是正确的方法..
      • 哦,我不知道这会在 mysql 中工作。我尝试删除不赞成票,但它说除非编辑答案,否则投票已锁定。
      • @VoodooChild,不用担心..(虽然我刚刚添加了一个免责声明,它仅适用于 mySql
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-07
      • 2013-02-22
      • 2014-10-04
      • 2021-02-05
      • 2017-11-12
      相关资源
      最近更新 更多