代码之家  ›  专栏  ›  技术社区  ›  David Brierton

如何从同一列添加正负合计

  •  0
  • David Brierton  · 技术社区  · 5 年前

    我正在将SQL Server与一个名为 dbo.over_short 我正试图找出如何从同一列中添加总计。

    我有一个专栏叫 FINAL_OVER_SHORT_AMOUNT 它有十进制(10,2)的设计。

    在该字段中,有正数(ex 608.90)、中性数(ex 0.00)和负数(ex-608.90)。

    是否可以将所有正数和所有负数分别相加(以减号开头的数字)。

    基本上要有一份多少已经结束,多少是负面的报告?(不让负片从正片中减去。两个单独的总数)

    select 
      ID,
      TRANSACTION_DATE,
      ASSOCIATE_ID,
      AGENCY_CODE,     
      FINAL_OVER_SHORT_AMOUNT
    from
      dbo.over_short
    

    如有任何帮助,我们将不胜感激!

    3 回复  |  直到 5 年前
        1
  •  1
  •   Tim Biegeleisen    5 年前

    您可以在此处使用条件聚合:

    SELECT
        SUM(CASE WHEN FINAL_OVER_SHORT_AMOUNT >= 0
                 THEN FINAL_OVER_SHORT_AMOUNT ELSE 0 END) AS pos_amount,
        SUM(CASE WHEN FINAL_OVER_SHORT_AMOUNT < 0
                 THEN FINAL_OVER_SHORT_AMOUNT ELSE 0 END) AS neg_amount
    FROM dbo.over_short;
    

    您还可以使用类似的查询 GROUP BY ,假设您需要给定组/列的正/负和,例如 ID 列。

        2
  •  1
  •   HABO    5 年前

    Sign 是一个方便的小功能:

    -- Sample data.
    declare @Samples as Table ( Sample Decimal(10,2) );
    insert into @Samples ( Sample ) values
      ( -10.00 ), ( -5.00 ), ( 0.00 ), ( 42.00 ), ( 8.00 );
    
    -- Demonstrate separating values by sign.
    select Sample,
      Sample * -Sign( Sign( Sample ) - 1 ) as Negative,
      Sample * Sign( Sign( Sample ) + 1 ) as Positive
      from @Samples;
    
    -- Calculate the sums.
    select Sum( Sample ) as Total,
      Sum( Sample * -Sign( Sign( Sample ) - 1 ) ) as NegativeTotal,
      Sum( Sample * Sign( Sign( Sample ) + 1 ) ) as PositiveTotal
      from @Samples;
    
        3
  •  1
  •   Shwetali    5 年前

    你可以用这个
    select sum(case when FINAL_OVER_SHORT_AMOUNT>0 then FINAL_OVER_SHORT_AMOUNT else 0 end)as Positive, sum(case when FINAL_OVER_SHORT_AMOUNT<0 then FINAL_OVER_SHORT_AMOUNT else 0 end) as Negative from over_short
    或 您可以将存储结果分离到临时表中并使用它
    select sum(case when FINAL_OVER_SHORT_AMOUNT>0 then FINAL_OVER_SHORT_AMOUNT else 0 end)as Positive, sum(case when FINAL_OVER_SHORT_AMOUNT<0 then FINAL_OVER_SHORT_AMOUNT else 0 end) as Negative into #Temp from [dbo].[Temp]

    选择 和(正)为正和,和(负)为负 从温度