我计算字段的逻辑有什么问题(试图计算百分比)?

What is wrong with my calculated field's logic (trying to compute percentage)?

我用来计算百分比的 TSQL 显然搞砸了;这是我的存储过程逻辑的一部分:

. . .
AVG(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Price ELSE 0 END) 
Week1Price,
    AVG(CASE WHEN Ind.InvoiceDate BETWEEN @Week2Begin AND @EndDate THEN Ind.Price ELSE 0 END) 
Week2Price,
    AVG(CASE WHEN Ind.InvoiceDate BETWEEN @Week2Begin AND @EndDate THEN Ind.Price ELSE 0 END) 
 -
    AVG(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Price ELSE 0 END) 
PriceVariance,
    AVG(CASE WHEN Ind.InvoiceDate BETWEEN @Week2Begin AND @EndDate THEN Ind.Price ELSE 0 END) 
 -
    AVG(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Price ELSE 0 END) 
    / 
NULLIF(AVG(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Price ELSE 0 END),0) 
PercentageOfPriceVariance
. . .

我想用 PercentageOfPriceVariance 做的是:

(Week2Price - Week1Price) / Week1Price

例如,如果 Week2Price 为 3.38,Week1Price 为 20.27,则 (Week2Price - Week1Price) 应为 -16.89;然后 (-16.89) 除以 3.38 应该是 -4.99.

不过请注意,我得到的结果与那个结果大不相同(请参阅第 3 行,其中 % 为 2.38):

我计算字段的逻辑有什么问题?

括号应该适用于第一个集合,即 (Week2Price - Week1Price) 否则除法运算 Week1Price / Week2Price 将首先执行减法运算。这就是结果与您的预期不同的原因。

看例子:

SELECT (3.38 - 20.27) / NULLIF(3.38, 0) -- result -4.997041
SELECT 3.38 - 20.27 / NULLIF(3.38, 0)   -- result -2.617041 

所以你需要为第一组应用括号就可以解决问题。

注意: 在您的实际代码中,除数部分仅包含 WeeK1Price,但在 post 中您提到数据需要除以 Week2Price

当前您的代码 returns 由于错误的除数导致数据错误。

SELECT 3.38 - 20.27 / NULLIF(20.27, 0)  -- result 2.3800000

所以你的实际代码应该是:

(
 AVG(CASE WHEN Ind.InvoiceDate BETWEEN @Week2Begin AND @EndDate THEN Ind.Price ELSE 0 END) 
-
 AVG(CASE WHEN Ind.InvoiceDate BETWEEN @BegDate AND @Week1End THEN Ind.Price ELSE 0 END)
) 
/ 
NULLIF(AVG(CASE WHEN Ind.InvoiceDate BETWEEN @Week2Begin AND @EndDate THEN Ind.Price ELSE 0 END), 0) 
PercentageOfPriceVariance