2016-11-17 158 views
-1

我有以下數據,爲特定辦公室招募/申請的數字,並希望查找之前和當年的差異及其百分比增加或減少。計算差異和百分比

在預期輸出中提到了括號中使用的公式。

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% 

請幫助。

回答

0

如果您使用的是SQL Server 2012或更高版本,則可以使用LAG(或LEAD)函數。既然你不是,你可以用CTE來創作。該方法取自http://blog.sqlauthority.com/2013/09/22/sql-server-how-to-access-the-previous-row-and-next-row-value-in-select-statement/

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 

希望這會有所幫助。