2012-03-14 106 views
0

我已經看到很多有關使用會計年度計算字段總和的示例,但找不到符合我需要的字段。我想要做的是使用SQL Query獲取當前會計年度的總計。我有的字段是userid,startdate,total_hours和missed_hours。下面是該查詢我到目前爲止:僅根據當前會計年度計算字段的總計 - SQL

SELECT  
userid,  
SUM(total_hours) - SUM(missed_hours) AS hours  
FROM mytable  
GROUP BY userid 

這個偉大的工程,但我需要的是時間爲每個用戶ID的當前財年的總數。我們的財政年度從七月到六月。我只需要當前的財政年度,而且我需要它在今年7月重新開始。

+0

startdate字段的含義是什麼? – 2012-03-14 14:42:36

+0

startdate是將用於在會計年度的查詢中計算的「日期」字段。謝謝 – user1212436 2012-03-14 14:44:39

回答

1

假設這是SQLServer中的日期列

  • 的名字,請嘗試:

    SELECT userid, SUM(total_hours) - SUM(missed_hours) AS hours  
    FROM mytable 
    WHERE startdate >= cast(cast(year(dateadd(MM,-6,getdate())) as varchar(4)) + 
             '-07-01' as date) and 
         startdate < cast(cast(year(dateadd(MM, 6,getdate())) as varchar(4)) + 
             '-07-01' as date) 
    GROUP BY userid 
    
  • +0

    我試過這個,但得到了錯誤:靠近','的語法錯誤。 – user1212436 2012-03-14 15:16:17

    +0

    我的查詢中有一個錯誤,現在我已經更正了 - 如果您使用的是SQLServer,現在應該可以正常工作。 – 2012-03-14 15:20:05

    +0

    剛剛在where語句的第二部分拿出了額外的「,」。我不得不將日期更改爲日期時間。這對我有用。謝謝! – user1212436 2012-03-14 15:22:39

    1

    添加where子句:

    FROM mytable 
    WHERE startdate >= '2011-07-01' 
    GROUP BY userid 
    

    或者與年初動態:

    where startdate >= dateadd(yy, datepart(yy, getdate())-2001, '2000-07-01') 
    
    +0

    我並沒有服用你,我知道這是一個簡單的解決方法,但是op要求會計年度並且說他們的財政年度從七月到六月運行 – Lamak 2012-03-14 14:47:27

    +0

    啊我在想,在答案 – Andomar 2012-03-14 14:50:12

    +0

    中更新現在你會得到一個來自我的+1 ... – Lamak 2012-03-14 14:55:31

    0

    也許是這樣的:

    SELECT 
        userid, 
        SUM(total_hours) - SUM(missed_hours) AS hours 
    FROM 
        mytable 
    WHERE 
        MONTH(startdate) BETWEEN 6 AND 7 
        AND YEAR(startdate) IN (2011,2012) 
    GROUP BY userid 
    
    0

    對於解決方案,另外兩個需要信息

    • RDBMS的供應商類型使用的是

    我認爲你的日期欄是date_col和你正在使用MySQL

    SELECT  
    userid,  
    SUM(total_hours) - SUM(missed_hours) AS hours  
    FROM mytable  
    WHERE date_col between STR_TO_DATE('01,7,2011','%d,%m,%Y') and STR_TO_DATE('01,7,2010','%d,%m,%Y') 
    GROUP BY userid