2012-06-28 56 views
-2

我必須獲得在SQL中花費的時間的任何想法的小計?如何在sql中獲得小計的總時間

這只是我查詢的一個簡單例子。

`SELECT 
    A.INDX, B.CLIENTNAME, C.PROJECTNAME, D.NAME, 
    CONVERT(CHAR(10), A.CDATE, 101) [DATE], 
    CONVERT(TIME(0), A.START_TIME, 108) [START], 
    CONVERT(TIME(0), A.END_TIME, 108) [END], 
    CONVERT(TIME(0), (A.END_TIME - A.START_TIME), 108) [HOURS_WORKED] 
FROM 
    LOGSHEET A, CLIENTS B, PROJECTS C, DEVELOPERS D 
WHERE B.CLIENTNO = 1 
    AND C.PROJECTID = 11 
    AND D.USERID = 1` 

總應該是在工作時間

翻掉logsheet表

`BEGIN CREATE TABLE [dbo].[LOGSHEET](
[INDX] [int] IDENTITY(1,1) NOT NULL, 
[CLIENTNO] [int] NULL, 
[PROJECTID] [int] NULL, 
[USERID] [int] NULL, 
[CDATE] [datetime] NULL, 
[START_TIME] [datetime] NULL, 
[END_TIME] [datetime] NULL) ON [PRIMARY]END GO` 

基本上是我需要

名稱|開始時間|結束時間| Hours_worked |

AJ ...... | 07:00:00 | 07:15:00 | 00:15:00 |

AJ ..... | 07:00:00 | 07:15:00 | 00:15:00 |

  Total: |00:30:00| 
+1

你根本沒有加入你的餐桌.....你真的想要在所有這些餐桌之間使用笛卡爾產品嗎? –

+1

我同意 - 停止使用舊式連接(請閱讀:http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style- joins.aspx)。另外,如果start_time - > end_time穿越午夜? –

+0

抱歉沒有加入表這是一個非常joung的項目,這只是粗略的計劃仍然和亞倫時代不會經過午夜,因爲這是一個小型辦公應用程序僅適用於交易時間如07:00-16:30 –

回答

0

玉以及我想出了一個解決我的問題只需添加一個字段「分」運行從C#

if (e.CommandName == "Stop") { 
    int row = int.Parse(e.CommandArgument.ToString()); 
    string indx = GridView1.Rows[row].Cells[1].Text; 
    string s = null; 
    s = "UPDATE LOGSHEET "; 
    s += "SET MINUTES = (DATEPART(HOUR,TIME_SPENT)*60)+(DATEPART(MINUTE,TIME_SPENT)) "; 
    s += "WHERE INDX = @p0 "; 


    String[] pr = new String[1]; 
    pr[0] = indx; 

    cQ.execSql(s, pr); 

    } 
} 

巫婆給我的鐘如int和再查詢只運行

protected string GetTotal() { 
    string userid = Session["id"].ToString(); 
    string s = null; 


    s = "SELECT SUM(MINUTES) "; 
    s += "FROM LOGSHEET "; 
    s += "WHERE USERID = @p0 "; 

    String[] pr = new String[1]; 
    pr[0] = userid; 

    return cQ.GenQuery(s, pr); 
} 

其次

label5.text = GetTotal(); 

和KABOOM完成在幾分鐘proble花光了所有的時間總和米解決

這是一個C#程序,但我需要的SQL查詢來解決它

多虧了幫助的人!

0
DECLARE @start_time DATETIME, @end_time DATETIME; 

SELECT @start_time = '20120621 22:05', @end_time = '20120622 06:47'; 

SELECT CONVERT(TIME(0), DATEADD(MINUTE, DATEDIFF(MINUTE, @start_time, @end_time), 0)); 

結果:

08:42:00 

所以,如果你在一個表中有數據,這將是非常相似的:

SELECT CONVERT(TIME(0), DATEADD(MINUTE, 
    DATEDIFF(MINUTE, A.start_time, A.end_time), 0)) AS [HOURS_WORKED] 
FROM ... 

你應該遠離的東西收起來,如添加和減去日期/時間類型,並使用DATEADD等內置函數。這種簡寫與datetime/smalldatetime一起使用,但是對於新類型可能會產生問題。

+0

拍攝感謝寧願做現在和下一次,但現在的問題是,我仍然可以在工作時間字段中添加總時間? –

+0

您需要提供樣本數據和期望的結果。我無法從虛假查詢中得知「總時間」的含義。請參閱http://dba.blogoverflow。com/2012/06/help-us-help-you/ –

+0

直線前進如何從[HOURS_WORKED]中獲得SUM?它說無效的列名稱。 –