2016-04-07 4 views
1
года

У меня есть оператор выбора, как показано ниже:дисплей сумма от предыдущего

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

Как добавить после столбца previous_year, sum([value]) сравнению с предыдущим годом?

enter image description here

+1

['LAG/LEAD'] (https://msdn.microsoft.com/en-us/library/hh231256.aspx), если SQL Server 2012+, присоединяется, если ниже – lad2025

+0

@ 4est Рад помочь ! – DhruvJoshi

ответ

1

Пожалуйста, попробуйте ниже запрос для 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

0

Если вы используете SQL Server 2012+ можно использовать LAG, чтобы получить значение предыдущего ряда:

;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 
+0

это SQL Server 2008: /, это еще один способ сделать это? – 4est

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 

Это ответ, который я получил

fiscalYr | значение | PrevYr | Значение

2014 | 165 | 2013 | NULL

2015 | 179 | 2014 | 165

2016 | 143 | 2015 | 179