【问题标题】:Can I override a column's value in Select CASE SQL我可以在 Select CASE SQL 中覆盖列的值吗
【发布时间】:2012-12-13 21:35:57
【问题描述】:

我是否可以覆盖列中的值,这样如果情况为真,它会告诉值 x 等于查询中的另一个动态值。这是伪代码。我知道这行不通。

Select jobTitle, managerTitle, bigBossTitle,
    CASE WHEN jobtitle like '%DEVELOP%' THEN managerTitle = bigBossTitle
    END 
From PeopleTable
inner join... other tables...

谢谢。

【问题讨论】:

    标签: sql case


    【解决方案1】:

    试试这个:

    Select     
        jobTitle, 
          CASE WHEN jobtitle like '%DEVELOP%' 
          THEN bigBossTitle 
          ELSE managerTitle 
          END as managerTitle, 
        bigBossTitle,
    
    From PeopleTable
    inner join... other tables...
    

    您只需将 case 语句放在 managerTitle 列所在的位置,然后将结果别名为 managerTitle。这种逻辑有效地为您提供了您正在寻找的东西。要真正“替换”一个值,您需要执行更高级的 T-SQL,但实际上并没有必要。

    在连接谓词中使用 case 语句的示例:

    ...
    inner join otherTable 
    on otherTable.bossTitle = 
          CASE WHEN jobtitle like '%DEVELOP%' 
          THEN bigBossTitle 
          ELSE managerTitle 
          END
    

    【讨论】:

    • 干杯。我现在就试一试。
    • 我是非常亲密的伙伴。在一个相当长的查询结束时,我有一个内部连接,我现在需要 managerTitle 的新值来连接到另一个表。 table2 上的内部连接 ​​table2 = managerTitle。这可能吗?
    • @Sean:是的,这是可能的。在最简单的形式中,只需在连接谓词/子句中使用 case 语句,但删除别名 as managerTitle)
    • @Sean:我更新了答案以包括在连接谓词中使用 case 语句的示例。
    • 感谢您抽出宝贵时间,保罗。我很感激。我会试试的。
    【解决方案2】:

    试试这个:

    Select jobTitle,
        CASE
            WHEN jobtitle like '%DEVELOP%'
            THEN bigBossTitle
            ELSE managerTitle 
        END as managerTitle,
       bigBossTitle
    From PeopleTable
    inner join... other tables...
    

    【讨论】:

      【解决方案3】:

      你们很亲密。你的CASE 会是这样的:

      Select jobTitle, bigBossTitle,
          CASE 
                WHEN jobtitle like '%DEVELOP%' 
                THEN bigBossTitle 
                ELSE managerTitle
          END as managerTitle
      From PeopleTable
      inner join... other tables...
      

      【讨论】:

        【解决方案4】:

        尝试类似的方法:

        Select jobTitle, managerTitle, bigBossTitle, IF(jobtitle like '%DEVELOP%', bigBossTitle, OTHER_VALUE_IF_FALSE) AS managerTitle 
        From PeopleTable
        inner join... other tables...
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-03-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-24
          • 1970-01-01
          • 2021-11-14
          相关资源
          最近更新 更多