Comment faire pour calculer le pourcentage d'augmentation ou de diminution de la requête SQL unique?

J'ai une table avec la structure suivante

Event Id | Year ------------------- 1xxxxx | 2014 2xxxxx | 2014 3xxxxx | 2014 4xxxxx | 2014 5xxxxx | 2014 6xxxxx | 2015 7xxxxx | 2015 8xxxxx | 2015 

J'ai besoin de find le pourcentage d'augmentation du nombre d'events survenus en 2015 par rapport à 2014. Je dois le find en utilisant une seule requête SQL. Comment puis-je atteindre cet objective?

Par exemple, si nous prenons le nombre d'events survenus en 2014, il est égal à 5 ​​et le même est à 3 en 2015. Donc le pourcentage d'augmentation des events en 2015 par rapport à 2014 est ((3-5) * 100) / 5 = – 40,0%.

si je comprends bien, vous pouvez le faire avec une agrégation conditionnelle:

 select sum(case when year = 2014 then 1 else 0 end) as ev_2014, sum(case when year = 2015 then 1 else 0 end) as ev_2015, (sum(case when year = 2015 then 100.0 else 0 end) sum(case when year = 2014 then 1.0 end) ) - 100.0 as percent_change from table t; 

Voici une déclaration générique qui ne se limite pas seulement aux années 2014 et 2015:

 CREATE TABLE test (id INT, year int); Insert into test values (1, 2014), (2, 2014), (3, 2014), (4, 2014), (5, 2014), (6, 2015), (7, 2015), (8, 2015), (9, 2016) ;with cte as( select year y, count(*) c from test group by year) select c1.y, ca.y, (c1.c - ca.c)*100.0/ca.c inc, (ca.c - c1.c)*100.0/c1.c dec from cte c1 cross apply(select top 1 * from cte c2 where c2.y < c1.y order by c2.y desc)ca 

Sortie:

 yy inc dec 2015 2014 -40 66.666666666666 2016 2015 -66.666666666666 200 

Fiddle http://sqlfiddle.com/#!6/9e1cf/3