条件 SUM 不允许操作数

Conditional SUM not allowing operands

我正在尝试将 SUMOrder amount 转换为固定货币。 Order table 中的 amount 可以是不同的货币。

如果 Currency table 中的 IsBase 标志是 1,那么我想用 Rate 除,否则我想乘以Rate.

SELECT CASE WHEN c.isBase = 1
            THEN SUM(o.Amount / c.Rate) 
            ELSE SUM(o.Amount * c.Rate)
            END
FROM   Orders o JOIN Currency c 
ON     o.Currency = c.Currency

这不起作用并给出错误:

Column c.isBase' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

但该列不是 SELECT 的一部分。它是 SELECT 中条件的一部分。如果我想要这样的 SUM,我怎样才能让它工作?

    SELECT SUM(CASE WHEN c.isBase = 1
                THEN o.Amount / c.Rate
                ELSE o.Amount * c.Rate
                END) AS answer
    FROM   Orders o JOIN Currency c 
    ON     o.Currency = c.Currency

您应该将 CASE 表达式放在 SUM 聚合函数中:

SELECT
    SUM(CASE WHEN c.isBase = 1 THEN o.Amount / c.Rate ELSE o.Amount * c.Rate END) 
FROM Orders o
JOIN Currency c 
    ON  o.Currency = c.Currency

请尝试以下

SELECT CASE WHEN c.isBase = 1
            THEN SUM(o.Amount / c.Rate) 
            ELSE SUM(o.Amount * c.Rate)
            END
FROM   Orders o JOIN Currency c 
ON     o.Currency = c.Currency
GROUP BY c.isBase