【问题标题】:Selecting fields based on FiscaL Year and Period根据会计年度和期间选择字段
【发布时间】:2014-08-25 18:26:02
【问题描述】:

我使用的表格有一个金额字段、一个会计年度和一个期间字段(以及其他字段)。我需要根据会计年度和期间字段选择两次金额字段。我遇到的问题是如何编写 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

【问题讨论】:

    标签: sql oracle11g


    【解决方案1】:

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

    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.

    【讨论】:

    • 感谢您的帮助。我是编写 sql 的新手,不确定子查询会包含什么。我查看了 SQL Fiddle 并看到了结果中的第一行。我想看到的是同一行的当前金额和先前金额。这可能吗?感谢您的帮助....
    • 如果删除where 子句,它将返回更多行。之前和当前的金额将在同一行中。
    • 谢谢。我试图修改您向我展示的查询,因为我需要加入另一个表。我试图在这里发布它,但它太长了。我将创建另一个问题,看看是否有人可以告诉我 sql 有什么问题。再次感谢
    猜你喜欢
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 2019-07-12
    • 1970-01-01
    相关资源
    最近更新 更多