1

公司会计年度:7 月 1 日 - 6 月 30 日

我有一个查询,我正在尝试按产品和成本中心捕获本财年迄今为止的总单位数和收入美元。它将在每月 1 日运行,并查看上个月的最后一天。会计年度不会出现在报告中 - 这是标准。

    Mix of pseudocode and SQL:
    Where
      If datepart(mm,getdate()) - 1 < 7
        THEN 
           transaction_post_date BETWEEN 7/1/ previous year AND dateadd(day,-(day(getdate()),getdate())          
        Else 
           transaction_post_date BETWEEN 7/1/current year AND dateadd(day,-(day(getdate()),getdate())          

我在写轨道上吗?如何为取决于 SQL 的年份的特定日期编写 SQL - 7/1/当年?

我使用变量很弱,甚至不知道我是否有权在 SQL Server DB 上创建它们,这相当锁定。绝对不能创建函数。(我是一名业务分析师。)

更新,财政年度向前发展,所以 2010 年 7 月 1 日是 2011 财政年度。

我认为这有效:

    Year(dateadd(month,6,htx.tx_post_date)) = Year(DateAdd(Month, 5, GetDate()))

回馈?

现在我被要求将数量和收入的财政年初至今字段添加到以下查询中,这给了我总计

    Select 
      inv.ITEM_CODE 
    , inventory.ITEM_NAME 
    , cc.COST_CENTER_CODE 
    , tx.REV_CODE_ID 
    , tx.PRICE 
    , tx.ITEM_SALE_ID
    , sum(tx.quantity)
    , sum(tx.amount)

    from
    transactions tx
    inner join inventory inv on inv.item_id = tx.item_id
    left outer join cost_center cc on cc.cost_center_id = tx.cost_center_id

    where 
    DATEPART(mm, tx.tx_date) = DATEPART(mm,dateadd(m,-1,getdate()))
and DATEPART(yyyy, tx.tx_date) = DATEPART(yyyy,dateadd(m,-1,getdate()))

    group by 
      inv.ITEM_CODE 
    , inventory.ITEM_NAME 
    , cc.COST_CENTER_CODE 
    , tx.REV_CODE_ID 
    , tx.PRICE 
    , tx.ITEM_SALE_ID

我需要在此报告中添加财政年度迄今为止的数量和金额列。顺便说一下相关子查询吗?连接会很棘手吗?我从未将子查询与聚合/分组查询一起使用。

感谢您之前的所有帮助。

4

3 回答 3

2

如果我需要按会计年度分组,我会这样做:

Group by Year(DateAdd(Month, -6, TransactionDate))

可能不完全是这样,但你明白了。

于 2012-05-15T15:51:09.667 回答
0

我会在您的表中添加一个名为 FiscalYear 的计算列(使用正确的计算)并根据该列进行选择

于 2012-05-15T16:01:18.370 回答
0

我相信最简单的方法是分两步完成。使用 WHERE 子句过滤您的 YTD,然后使用 GROUP BY 按 FY 分组。由于您的 FY 从 7 月 (7) 开始,如果月份大于 June(6),则增加 FY。

条款:

WHERE
DATEDIFF(DAY, transaction_post_date,  Cast(Month(GetDate()) as varchar) +
'/' + Cast(Day(GetDate()) as varchar) + '/' + CAST(Case WHEN 
MONTH(transaction_post_date) > 6 then YEAR(transaction_post_date) + 1 else 
Year(transaction_post_date) end as varchar)) >=0

按条款分组:

GROUP BY CASE WHEN MONTH(transaction_post_date) > 6 then 
Year(transaction_post_date) + 1 else YEAR(transaction_post_date) end
于 2015-01-07T21:10:40.587 回答