【问题标题】:SQL inline if statement type questionSQL inline if 语句类型问题
【发布时间】:2008-11-13 19:36:03
【问题描述】:

我想做一个 (MS)SQL 查询,它返回如下内容:

Col1 Col2                  Col3
---- --------------------- ------
AAA  18.92                 18.92
BBB  20.00                 40.00
AAA  30.84                 30.84
BBB  06.00                 12.00
AAA  30.84                 30.84
AAA  46.79                 46.79
AAA  86.40                 86.40

其中 Col1 = AAA 时 Col3 等于 Col2,而 Col1 = BBB 时 Col3 是 Col2 的两倍。 有人可以指出正确的方向吗?

【问题讨论】:

标签: sql sql-server


【解决方案1】:

您没有提到您使用的是哪种数据库。以下是适用于 SQL Server 的内容:

SELECT Col1, Col2, 
    CASE WHEN Col1='AAA' THEN Col2 WHEN Col1='BBB' THEN Col2*2 ELSE NULL END AS Col3
FROM ...

【讨论】:

  • 哦:没想到这个问题的解释。我以为他在要求一个复杂的 where 子句。看看他用的是哪个会很有趣。
  • 我想他想过滤记录。
【解决方案2】:

如果值为空,您也可以像这样使用ISNULLCOALESCE 函数:

SELECT ISNULL(Col1, 'AAA') AS Col1, 
       ISNULL(Col2, 0) AS Col2,
       CASE  WHEN ISNULL(Col1, 'AAA') = 'BBB' THEN ISNULL(Col2, 0) * 2 
             ELSE ISNULL(Col2) 
       END AS Col3
FROM   Tablename

【讨论】:

    【解决方案3】:

    这取决于您的 SQL 风格。案例/何时与 SQL Server(可能还有其他)一起使用。

    Select Col1, Col2, 
           Case When Col1 = 'AAA' Then Col2 Else Col2 * 2 End As Col3
    From   YourTable
    

    【讨论】:

      【解决方案4】:
      select *
      from yourtable
      where (Col3 = col2 AND Col1 = 'AAA') OR
          (Col3 = (2*Col2) AND Col1='BBB')
      

      【讨论】:

      • 哦:没想到这个问题的解释。我以为他要的是计算列。它会很想看看他用的是哪个。
      【解决方案5】:

      有时值是null,所以可以这样处理:

      select Address1 + (case when Address2='' then '' else ', '+Address2 end) +              
          (case when Address3='' then '' else ', '+ Address3 end) as FullAddress from users
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-05
        • 1970-01-01
        • 2020-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-16
        相关资源
        最近更新 更多