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 - 7/1/当年に依存する年の特定の日付の SQL を作成するにはどうすればよいですか?

私は変数を使用するのが苦手で、ロックダウンされている 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

これを 2 つのステップで行うのが最も簡単な方法だと思います。WHERE句を使用してYTDをフィルタリングしてから、GROUP BYを使用してFYでグループ化します。FY は July(7) で始まるため、月が June(6) より大きい場合は FY を増やします。

WHERE句:

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

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 に答える