【问题标题】:How to convert negative value into zero如何将负值转换为零
【发布时间】:2015-09-11 13:47:36
【问题描述】:
    SELECT  name ,
        ( SUM(CASE WHEN TransTypeName LIKE 'credit%' THEN amount
                   ELSE 0
              END) - SUM(CASE WHEN TransTypeName LIKE 'Debit%' THEN amount
                              ELSE 0
                         END) ) * 5 / 100 AS Interest
    FROM .....

此查询返回一些负值,我想将负值转换为零。 如何编写查询

【问题讨论】:

标签: sql sql-server sql-server-2008


【解决方案1】:

给这个

select greatest(:yourval,0)

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。
【解决方案2】:

适合那些喜欢用短行而不是长 CASE 语句的人。

使用isnull(nullif(sign({column name}),-1),0):

select isnull(nullif(sign(-100),-1),0) as negative
select isnull(nullif(sign(0),-1),0) as zero
select isnull(nullif(sign(100),-1),0) as positive

【讨论】:

    【解决方案3】:
    SELECT t1.name AS Name, CASE WHEN t1.Interest > 0 THEN Interest ELSE 0 END AS Interest
    FROM (select name, (sum(case when TransTypeName like 'credit%' then amount else 0 end) - sum(case when TransTypeName like 'Debit%' then amount else 0 end)) *5/100 as Interest from ...........) as t1
    

    【讨论】:

      【解决方案4】:

      使用第二个 case 语句:

      select name, (sum(case when TransTypeName like 'credit%' then (case when amount>0 then amount else 0 end;) else 0 end) -
      sum(case when TransTypeName like 'Debit%' then (case when amount>0 then amount else 0 end;) else 0 end)) *5/100 as Interest
      from ...........
      

      如果你不返回一个负数:

      select name, (case when (sum(case when TransTypeName like 'credit%' then amount else 0 end) -
      sum(case when TransTypeName like 'Debit%' then amount ) else 0 end)) *5/100)<0 then 0 else  (sum(case when TransTypeName like 'credit%' then amount else 0 end) -
      sum(case when TransTypeName like 'Debit%' then amount ) else 0 end)) *5/100) as Interest
      from ...........
      

      【讨论】:

        【解决方案5】:

        可能是这样的吗?

        SELECT t1.name AS Name, CASE WHEN t1.Interest > 0 THEN Interest ELSE 0 END AS Interest
        FROM (select name, (sum(case when TransTypeName like 'credit%' then amount else 0 end) - sum(case when TransTypeName like 'Debit%' then amount else 0 end)) *5/100 as Interest from ...........) as t1
        

        【讨论】:

          猜你喜欢
          • 2023-03-22
          • 2020-04-04
          • 1970-01-01
          • 2011-07-04
          • 1970-01-01
          • 1970-01-01
          • 2013-11-07
          • 2019-01-17
          • 2012-07-01
          相关资源
          最近更新 更多