2012-05-15 43 views
1

公司的會計年度:七月1日至6月30日財年至今在where子句(T-SQL)

我在那裏,我試圖通過產品和成本來捕獲的單位和$收入合計#查詢爲財政年度至今的中心。它將在本月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數據庫上創建它們,而這些數據庫已被鎖定。絕對不能創建一個功能。 (我是一個業務分析師)

UPDATE,財政年度前進,所以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 

我需要添加財年TO-以下查詢日期數量和金額欄到這個報告。相關的子查詢將走的路嗎?聯接會不會很棘手?我從來沒有使用過聚合/分組查詢的子查詢。

感謝所有先前的幫助。

+0

步驟之一*會意*如果你可以做一些事情是嘗試它。你應該沒有問題做'DECLARE @myVar AS INT'等。 – MatBailie

+0

你真的不想在日期範圍中使用'BETWEEN',特別是在做月末/日終檢查時做'不到下個月的第一天/一天的開始'是最容易的,尤其是對於時間戳)。另外,儘管我的直覺告訴我有一種方法可以用一組函數來完成此操作,但您可能需要考慮創建日曆文件(不過,您可能需要自定義一些內容)。 –

回答

2

這裏是我會怎麼做,如果我需要按會計年度:

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

可能是不完全的,但你的想法。

+4

它應該是'-6',而不是'-7'。 –

+0

如果你需要特定日期範圍的數據,爲什麼不把它放在'htx這樣的條件。FiscalYearStart和FiscalYearEnd之間的tx_post_date?如果您需要根據財政年度的範圍彙總,則這是另一回事,那麼您可以使用上述分組。 –

+0

對不起,你在說我嗎?因爲我看不到你的陳述和我的評論之間的相關性,即使你在那裏所說的話一般都有意義。我只是想稍微改正你的計算結果(即如果一年的開始是在七月份而不是一月份,那麼它會被轉移6個月而不是7年)。 –

0

我將計算的列添加到您的名爲FiscalYear(用正確的計算)表並根據該列

0

我認爲最簡單的方法就是做這兩個步驟。使用WHERE子句過濾YTD,然後使用GROUP BY按FY分組。由於您的FY在7月份開始(7),如果月份大於6月份(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 
+1

嘗試格式化代碼以提高可讀性。 –