-2

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`

合計は勤務時間未満である必要があります

ログシート テーブルを削除しました

`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|
4

2 に答える 2

0

さて、フィールド「MINUTES」を追加して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 は、問題を解決した分で費やされたすべての時間の合計を完了しました

これは C# プログラムですが、解決するには SQL クエリが必要でした

助けてくれた人々に感謝します!!

于 2012-07-04T06:56:11.493 に答える
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 で機能しますが、新しい型では問題が発生する可能性があります。

于 2012-06-28T12:46:45.493 に答える