从过去2年到2016年的利润计算

时间:2015-11-30 08:32:36

标签: sql sql-server

尊敬的Techie,

任何人都可以帮助我解决这个危急情况。

我试图将2016年的销售额与(2015,2014)的销售额进行比较 和存储在alias列中的差异为2016年的Sales_growth, 对于年份(2015,2014),别名列为' 1'

基于关键列月份sales_manager_code和sales_group。

但是当没有关键匹配时(月,sales_manager_code,sales_group。) 然后是别名列sales_growth 1

计算公式

SGR = (sales(2015 or 2014)-sales (2016)) / Sales_growth(2015)

表格结构和数据

DECLARE @T TABLE
(
YEAR VARCHAR (50),  
MONTH   VARCHAR (50),
SALES_MANAGER_CODE VARCHAR (50),    
SALES_GROUP VARCHAR (50),
NetProductSales VARCHAR (50)

)

INSERT @T

SELECT '2015',  '10',   '10',   'ARS',  '126431.16' UNION ALL
SELECT '2015',  '10',   '4',    '4',    '1247439.2' UNION ALL
SELECT '2014',  '11',   '4',    '2',    '1399367.53' UNION ALL
SELECT '2016',  '10',   '10',   'ARS',  '126431.16' UNION ALL
SELECT '2016',  '10',   '4',    '4',    '1247439.2' UNION ALL
SELECT '2016',  '11',   '4',    '2',    '1399367.53' UNION ALL
SELECT '2015',  '8',    '11',   '0',    '44518.18'

预期输出这里sales_margin是存储结果的别名列

/*
YEAR    MONTH   SALES_MANAGER_CODE  SALES_GROUP NetProductSales SALES_MARGIN
2015,   10, 10, ARS,126431.16,  1
2015,   10, 4,  4,  1247439.2,  1
2014,   11, 4,  2,  1399367.53, 1
2016,   10, 10, ARS,    3565898.25, -27.20426744
2016,   10, 4,  4,  5469856.25, 3.384868016
2016,   11, 4,  2,  45268912.65,    31.34955198
2015,   8,  11, 0,  44518.18,   1



*/

谢谢,

1 个答案:

答案 0 :(得分:1)

我不确定你在哪里得到SalesGrowth但是使用LEFT OUTER连接会给你一个NULL,其中没有相应的连接行,你可以使用COALESCE将NULL转换为1.

DECLARE @T TABLE
(
YEAR VARCHAR (50),  
MONTH   VARCHAR (50),
SALES_MANAGER_CODE VARCHAR (50),    
SALES_GROUP VARCHAR (50),
NetProductSales decimal( 28, 16 )

)

INSERT @T

SELECT '2015',  '10',   '10',   'ARS',  126431.16 UNION ALL
SELECT '2015',  '10',   '4',    '4',    1247439.2 UNION ALL
SELECT '2014',  '11',   '4',    '2',    1399367.53 UNION ALL
SELECT '2016',  '10',   '10',   'ARS',  126431.16 UNION ALL
SELECT '2016',  '10',   '4',    '4',    1247439.2 UNION ALL
SELECT '2016',  '11',   '4',    '2',    1399367.53 UNION ALL
SELECT '2015',  '8',    '11',   '0',    44518.18


select * 
      , COALESCE( ( tprv.NetProductSales - t16.NetProductSales ) / ???? ), 1 ) as SALES_MARGIN
from @T t16
    left outer join @T tprv on tprv.YEAR = t16.YEAR - 1
                           and tprv.MONTH = t16.MONTH
                           and tprv.SALES_MANAGER_CODE = t16.SALES_MANAGER_CODE
                           and tprv.SALES_GROUP = t16.SALES_GROUP
where t16.YEAR = 2016