计算SQL Server中的百分比差异

时间:2013-09-10 14:29:20

标签: sql-server-2008

我有两个月有两个值,例如:

July-2013  1838.08
Aug-2013   3500.08

如何计算8月与7月相比的百分比差异?

3 个答案:

答案 0 :(得分:28)

这方面的公式很简单(Curr-Prev)*100.0/Prev,不清楚如何应用它,因为我们不知道你的表定义,内容或键,因此不知道如何一般选择一个月,它是以前的价值。但是,硬编码就像这样:

SELECT  
    100.0*(curr.Val - prev.Val) / prev.Val As PercentDiff
FROM yourTable As curr
JOIN yourTable As prev
    ON  curr.MonthStr = 'Aug-2013' AND prev.MonthStr = 'July-2013'

答案 1 :(得分:1)

SELECT VAR(Bonus) 'Variance',
STDEVP(Bonus) 'Standard Deviation',
STDEV(Bonus) 'Standard Deviation',
VARP(Bonus) 'Variance for the Population'
FROM Sales.SalesPerson;

赞扬以下内容

http://blog.sqlauthority.com/2008/01/20/sql-server-introduction-to-statistical-functions-var-stdevp-stdev-varp/

答案 2 :(得分:1)

计算百分比变化的问题是,当“旧值”为0或者您将收到错误时需要注意。

一种方法是使用nullif(old_Value,0),但问题是当旧值为0时,你要求New_Value / NULL这是新值。 (绝对不是%变化)

我这样做了:

(case
            when
                OldValue = 0 and NewValue = 0
            then
                cast(0 as Decimal(10,2))
            when
                OldValue = 0
            then
                'Na'
            else
                cast(cast(
                            (
                                (
                                    (cast(NewValue as decimal(11,3)) - 
                                     cast(OldValue as decimal(11,3))
                                    )*100
                                )/cast(OldValue as decimal(11,3))
                            ) as decimal(20,3)
                         ) as varchar
                    )

            end) '% Change' 

我可能会抛出比必要更多的演员,但它对我来说效果很好。必要时给Na,必要时给0.