Where子句中的会计年度(T-SQL)

时间:2012-05-15 15:44:01

标签: sql sql-server tsql

公司的财政年度: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数据库上创建它们,而SQL Server数据库却被锁定了。绝对不能创建一个功能。 (我是商业分析师。)

更新,财政年度向前推进,因此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

我需要在此报告中添加会计年度最新数量和金额列。一个相关的子查询会顺便去吗?联接会变得棘手吗?我从未使用带有聚合/分组查询的子查询。

感谢您之前的所有帮助。

3 个答案:

答案 0 :(得分:2)

如果我需要按财政年度分组,我会怎样做:

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

WHERE CLAUSE:

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 CLAUSE:

GROUP BY CASE WHEN MONTH(transaction_post_date) > 6 then 
Year(transaction_post_date) + 1 else YEAR(transaction_post_date) end