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

Sql 是否根据另一列中的值更改聚合函数中的值?,sql,sql-server,aggregate-functions,Sql,Sql Server,Aggregate Functions,我有两个问题。第一个字段仅列出单独的行,如果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 the

我有两个问题。第一个字段仅列出单独的行,如果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

有没有办法做到这一点,或者我应该将第一组结果放在临时表中,然后使用它,因为在这一点上,根据需要,值是负/正的

您可以将case语句包装到SUM函数中:-

SUM(CASE WHEN t.CancelCode = '1' THEN t.Quantity * -1 ELSE t.Quantity END) AS Quantity

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

SUM(CASE WHEN t.CancelCode = '1' THEN t.Quantity * -1 ELSE t.Quantity END) AS Quantity
这是你想要的吗

SUM(CASE t.CancelCode WHEN '1'
        THEN t.Quantity * -1
        ELSE t.Quantity
    END) AS Quantity,...
这是你想要的吗

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

使用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

使用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