【问题标题】:SUM Values Treat as POS or NEG based on Text value from another columnSUM 值根据另一列中的文本值视为 POS 或 NEG
【发布时间】:2017-09-29 14:27:05
【问题描述】:

我正在使用 SQL Server 管理工作室。我正在尝试使用 CASE 条件对“金额”列求和,即如果我的 DCIP 列值 = D,则将“金额”视为正整数,否则如果 DCIP 值 = C,则将“金额”视为负整数。以净额结束

DCIP    Amount  Name
-----------------------
C   100 Jack
C   100 Jack
D   300 Freddie
D   50  Jack
D   25  Freddie
C   100 Freddie

我按名称分组,应该返回以下结果:

Net Amount Name
---------------
-150       Jack
225.       Freddie

【问题讨论】:

    标签: sql sql-server oracle


    【解决方案1】:

    我想你想:

    select
    Amount *
    CASE DCIP
        WHEN 'D' THEN 1 
        ELSE -1
    END 
    from table
    

    然后按用户对此类表达式和分组求和

    select
    sum(Amount *
    CASE DCIP
        WHEN 'D' THEN 1 
        ELSE -1
    END)
    from table
    group by name
    

    【讨论】:

    • 是的,条件聚合。你可以改正你的错字,“我瘦了你”
    • 这很好用。不过我稍微调整了一下。我最终使用: SELECT SUM(CASE Table.Amount WHEN 'D' then Table.Amount *1 ELSE Table.Amount *-1 END AS Net_Amount GROUP BY Name
    【解决方案2】:

    使用条件聚合

    SELECT NAME,
           Net_Amount = Sum(CASE DCIP WHEN 'D' THEN Amount ELSE -Amount END) 
    FROM   table
    GROUP  BY NAME 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      • 2018-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-05
      • 1970-01-01
      相关资源
      最近更新 更多