SQL查询以获取客户的年度净额和年度增长百分比

时间:2017-11-01 06:30:47

标签: sql sql-server tsql

enter image description here

这是方案,

我正在创建一份报告,其中,每个客户每年订购的金额将会显示。而且比前几年的增长率还要高。

到目前为止我尝试过:

    SELECT * FROM (select MrCode MrCode17,MrName MrName17, SUM(NetAmt) NetAmount17,SUM(TotalNetAmt) TotalNetAmount17 from TASKORDER_REGISTER where UCODE = 'SR01'
AND TaskOrder_Dt between '2017-1-1 00:00:00' and '2017-12-31 00:00:00'
GROUP BY MrCode,MrName) as abc 

FULL JOIN 
(select MrCode MrCode16,MrName MrName16, SUM(NetAmt) NetAmount16,SUM(TotalNetAmt) TotalNetAmount16 from TASKORDER_REGISTER where UCODE = 'SR01'
AND TaskOrder_Dt between '2016-1-1 00:00:00' and '2016-12-31 00:00:00'
GROUP BY MrCode,MrName) AS bbb
ON abc.MrCode17 = bbb.MrCode16

FULL JOIN 
(select MrCode MrCode15,MrName MrName15, SUM(NetAmt) NetAmount15,SUM(TotalNetAmt) TotalNetAmount15 from TASKORDER_REGISTER where UCODE = 'SR01'
AND TaskOrder_Dt between '2015-1-1 00:00:00' and '2015-12-31 00:00:00'
GROUP BY MrCode,MrName) AS ccc
ON bbb.MrCode16 = ccc.MrCode15

结果如何:

enter image description here

我不确定完成任务的最佳程序是什么。获取数据必须有更好的查询。我还无法创造增长率。

1 个答案:

答案 0 :(得分:0)

请使用以下查询,它将返回年份,差异和[差异优先]。

请在结果集中添加其他列

    IF OBJECT_ID('tempdb..#SalesData') IS NOT NULL BEGIN DROP TABLE #SalesData END
    IF OBJECT_ID('tempdb..#FinalData') IS NOT NULL BEGIN DROP TABLE #FinalData END

    SELECT IDENTITY(int, 1,1) AS ID_Num ,year(TaskOrder_Dt) SalesYear,SUM(NetAmt) TotalAmount
    INTO    #SalesData
    FROM    TASKORDER_REGISTER GROUP BY year(TaskOrder_Dt)

    SELECT
       [current].ID_Num,
       [current].TotalAmount,
       [current].SalesYear,
       [current].TotalAmount - ISNULL([next].TotalAmount, 0) AS Diff,
       (([current].TotalAmount - ISNULL([next].TotalAmount,0)) * ISNULL([next].TotalAmount,1)) * 100 AS Diffper 
       INTO #FinalData
    FROM    #SalesData       AS [current]
    LEFT JOIN   #SalesData       AS [next]
          ON [next].ID_Num = (SELECT MAX(ID_Num) FROM #SalesData WHERE ID_Num < [current].ID_Num)

    DECLARE @cols AS NVARCHAR(MAX),@query  AS NVARCHAR(MAX)

    SELECT @cols = STUFF((SELECT  ',' + QUOTENAME(SalesYear) FROM #FinalData FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'),1,1,'')

    SELECT @query = 'SELECT * FROM (SELECT [SalesYear],Diff,Diffper FROM #FinalData) X
    PIVOT (AVG(Diff) for [SalesYear] in (' + @cols + ')) P'

    EXEC SP_EXECUTESQL @query