Sql server 2008 计算差额和百分比
我有以下数据,即某一特定职位的招聘/申请人数,并想找出上一年和本年之间的差异及其增加或减少的百分比 提到了预期输出中括号内使用的公式Sql server 2008 计算差额和百分比,sql-server-2008,Sql Server 2008,我有以下数据,即某一特定职位的招聘/申请人数,并想找出上一年和本年之间的差异及其增加或减少的百分比 提到了预期输出中括号内使用的公式 Office year recruited applied Pune 2015 10 15 Pune 2016 7 20 Mumbai 2015 10 23
Office year recruited applied
Pune 2015 10 15
Pune 2016 7 20
Mumbai 2015 10 23
Mumbai 2016 15 18
我的预期输出应该是:
Office Difference %recruited
Pune -3 (7-10) -30%(7-10/10)
Mumbai 5(15-10) 50%
请提供帮助。如果您使用的是SQL Server 2012或更高版本,则可以使用滞后(或超前)功能。既然你不是,你可以通过CTE获得创造力。这一方法来自于 希望这有帮助
SELECT 'Pune' AS Office,
'2015' AS year,
10 AS recruited,
15 AS applied
INTO #Temp
UNION
SELECT 'Pune' AS Office,
'2016' AS year,
7 AS recruited,
20 AS applied
UNION
SELECT 'Mumbai' AS Office,
'2015' AS year,
10 AS recruited,
23 AS applied
UNION
SELECT 'Mumbai' AS Office,
'2016' AS year,
15 AS recruited,
18 AS applied;
WITH cte AS (
SELECT rownum = ROW_NUMBER() OVER (PARTITION BY t.office ORDER BY t.year), * FROM #Temp t)
SELECT cte.office, cte.recruited - prv.recruited AS DifferenceRecruited,
((cte.recruited - prv.recruited) / CONVERT(FLOAT, prv.recruited) * 100) AS RecruitedChangePercentage,
cte.applied - prv.applied AS DifferenceApplied,
((cte.applied - prv.applied) / CONVERT(FLOAT, prv.applied) * 100) AS AppliedChangePercentage
FROM cte
LEFT JOIN cte prv ON prv.Office = cte.office AND prv.rownum = cte.rownum - 1
WHERE prv.recruited IS NOT null
ORDER BY cte.Office DESC