2

I have select statement like below:

  select [Fiscal Year], sum([value]), 
         YEAR(DATEADD(year,-1,[Fiscal Year])) as previous_year
  from [table1] 
  group by [Fiscal Year]

How to add after column previous_year, sum([value]) from previous year?

enter image description here

DhruvJoshi
  • 17,041
  • 6
  • 41
  • 60
4est
  • 3,010
  • 6
  • 41
  • 63

3 Answers3

2

Please try the below query for SQL 2008

select t1.[Fiscal Year],t1.Value,(t1.[Fiscal Year]-1) [previous_year],t2.Value [previous_value]
from  
(  select [Fiscal Year], sum([value]) value
  from [table1] 
  group by [Fiscal Year] 
)t1
LEFT JOIN
(  
select [Fiscal Year], sum([value]) value
  from [table1] 
  group by [Fiscal Year] 
)t2
ON t1.[Fiscal Year]=t2.[Fiscal Year]+1

SQL demo link

DhruvJoshi
  • 17,041
  • 6
  • 41
  • 60
0

If you are using SQL Server 2012+ you can use LAG to get the value of the previous row:

;with cte as (
  select [Fiscal Year], sum([value]) AS value, 
  from [table1] 
  group by [Fiscal Year]
)
select [Fiscal Year], value, 
       [Fiscal Year] - 1, lag(value) over (order by [Fiscal Year]) as prev_value
from cte
Giorgos Betsos
  • 71,379
  • 9
  • 63
  • 98
0
--to prepare the environment, let said this is your table
declare @table table
(
  fiscalYr integer,
  Value integer,
  previousyr integer,
  prevValue integer
)

--to prepare the value, let said these are your value
insert into @table values (2014,165,2013,0);
insert into @table values (2015,179,2014,0);
insert into @table values (2016,143,2015,0);

--the SQL
select A.fiscalYr,A.Value,A.previousyr, B.Value
from @table A left join
@table B on B.fiscalYr = A.previousyr

This the answer I got

fiscalYr| value| PrevYr| Value

2014| 165| 2013| NULL

2015| 179| 2014| 165

2016| 143| 2015| 179

shh
  • 91
  • 1