查找销售额月环比增长百分比的方法

Ways to find Percentage increase in sales Month over Month

我想使用 SQL 服务器查找每月销售额的增长百分比。我想通过使用自连接以及使用前面没有限制的行的分区来找到销售额的 % MoM 增长。我不想使用 lag()。谁能告诉我生成此解决方案的方法。

这是我的table。

create table growth_new(slno bigint,mon varchar(30),sales_amount bigint)

insert into growth_new values(1, 'Jan', 5000)
insert into growth_new values(2, 'Feb', 12000)
insert into growth_new values(3, 'Mar', 32000)
insert into growth_new values(4, 'Apr', 20000)

Slno Mon sales_amount
1    Jan    5000
2    Feb    12000
3    Mar    32000
4    Apr    20000

您可以使用 lag()。如果 slno 对行进行排序,则:

select gn.*,
       (gn.sales_amount * 1.0 / lag(gn.sales_amount) over (order by slno)) - 1 as increase
from growth_new gn;

自连接对于这个问题没有实际意义。但是如果你真的需要这个数据结构:

with gn as (
      select gn.*, convert(date, month + ' 2000') as mm
      from growth_new
     )
select gn.*,
       (gn.sales_amount * 1.0 / gnprev.sales_amount) - 1
from gn left join
     gn gnprev
     on gnprev.mm = dateadd(month, -1, gn.mm);

但是,您应该真正修复数据,使 month 的格式合理。

如果您不想使用 LEADLAG,您可以使用以下内容:

我假设你可以使用id进行比较,否则,你可以有一个table来存储月份id

selecT g.*, growth = 100*cast(iif(p.sales_amount is null,0,(g.sales_amount-p.sales_amount)*1.0/p.sales_amount) as money)
from growth_new g
left join growth_new p on p.slno=g.slno-1

输出是:

slno    mon     sales_amount    growth
1        Jan    5000             0.00
2        Feb    12000            140.00
3        Mar    32000            166.67
4        Apr    20000            -37.50

希望对您有所帮助

除非您想尝试其他替代方法,否则您确实可以使用滞后功能。同样如上所述,您的月份格式并不理想,根本无法扩展。

WITH growth_new(slno ,mon ,sales_amount)
AS (SELECT 1, 'Jan', 5000  UNION 
    SELECT 2, 'Feb', 12000 UNION
    SELECT 3, 'Mar', 32000 UNION
    SELECT 4, 'Apr', 20000 
   )

 SELECT cur.*, prev.mon as prev_month, 
 ISNULL(prev.sales_amount,0) AS prev_month_sales_amount,
 [%MoM Change] = ((cur.sales_amount - 
 ISNULL(prev.sales_amount,0))/CAST(prev.sales_amount as float))*100
 FROM growth_new cur
 LEFT JOIN growth_new prev ON prev.slno = cur.slno - 1


 slno   mon sales_amount    prev_month  prev_month_sales_amount %MoM Change
  1     Jan   5000            NULL               0                 NULL
  2     Feb   12000           Jan             5000                 140
  3     Mar   32000           Feb             12000          166.666666666667
  4     Apr   20000           Mar             32000               -37.5