代码之家  ›  专栏  ›  技术社区  ›  punkouter

是否根据另一列中的值更改聚合函数内的值?

  •  0
  • punkouter  · 技术社区  · 6 年前

    我有两个问题。第一个只列出单独的行,如果cancelcode为1,则使另一个字段为负数,如下所示:

      CASE t.CancelCode
           WHEN '1'
           THEN t.Quantity * -1
           ELSE t.Quantity
       END AS Quantity,...
    

    第二个查询汇总了总数,但如何使其检查上述条件?

         SUM(t.Quantity) AS Quantity, --case t.cancelcode is 1 then negative the value
    

    是否有一种方法可以做到这一点,或者我应该将第一组结果放入临时表中,然后使用它,因为此时的值是负值/正值(根据需要)?

    3 回复  |  直到 6 年前
        1
  •  1
  •   Gordon Linoff    6 年前

    这就是你想要的吗?

    SUM(CASE t.CancelCode WHEN '1'
            THEN t.Quantity * -1
            ELSE t.Quantity
        END) AS Quantity,...
    
        2
  •  2
  •   Mat Richardson    6 年前

    您可以将case语句包装在sum函数中:-

    SUM(CASE WHEN t.CancelCode = '1' THEN t.Quantity * -1 ELSE t.Quantity END) AS Quantity
    
        3
  •  1
  •   Daniel Brughera    6 年前

    使用Apply,如果您需要多次使用该案例,这会更有效。

    select sum(a.Quantity)
    from yourtable t
    cross apply (
    select CASE t.CancelCode
           WHEN '1'
           THEN t.Quantity * -1
           ELSE t.Quantity
       END AS Quantity
    ) a