根据FiscaL年份和期间选择字段

时间:2014-08-25 18:26:03

标签: sql oracle11g

我正在使用的表有一个金额字段,一个会计年度和一个期间字段(以及其他字段)。我需要根据会计年度和期间字段选择金额字段两次。我遇到的问题是如何编写SQL以选择2014财年和第10期的前一金额的记录。我还需要确保它适用于2014/01年,前一期是2013年12月。感谢您的帮助......

SELECT 
a.business_unit,
a.amount as CURRENT_AMOUNT,
a.amount as PRIOR_AMOUNT,
a.fiscal_year as FY,
a.period as AP

FROM Asset_Depreciation a

WHERE
a.business_unit = 'A0001'
AND a.fiscal_year = 2014
AND a.period = 11

结果 A0001 500.00(空白)2014 11

1 个答案:

答案 0 :(得分:0)

您可以使用lag()分析函数查找之前的amount。您可以使用子查询在lag()过滤器之前应用where

select  prevamount
,       business_unit
,       curamount
,       fiscal_year
,       period
from    (
        select  lag(amount) over (
                    partition by business_unit
                    order by fiscal_year, period) as prevamount
        ,       business_unit
        ,       amount as curamount
        ,       fiscal_year
        ,       period
        from    Asset_Depreciation
        ) SubQueryAlias
where   business_unit = 'A0001'
        and fiscal_year = 2014
        and period = 11

如果没有子查询,lag()只会查看一行,而不会找到任何先前的值。

Working example at SQL Fiddle.