2012-06-28 3 views
-2

Je dois obtenir le sous-total de temps passé en SQL des idées?comment obtenir le sous-total de temps en sql

Ceci est juste un exemple simple de ma requête.

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

Le total devrait être en heures travaillées

table dropped Mes journaux de pêche

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

essentiellement ce que je dois

nom

| heure de départ | Heure de fin | Heures travaillées |

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

Vous ne vous joignez pas à vos tables ... voulez-vous vraiment un produit cartésien entre toutes ces tables? –

+1

Je suis d'accord - arrêtez d'utiliser des jointures de style ancien (veuillez lire: http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style- joins.aspx). Et si start_time -> end_time traverse minuit? –

+0

désolé pour les tables non jointes c'est un très joli projet c'est juste une planification approximative encore et Aaron fois ne passera pas minuit car c'est une petite application de bureau seulement pour les heures de négociation comme 07:00 - 16:30 –

Répondre

0

Ok bien que je compris une solution à mon problème en ajoutant simplement un champ « minutes » et exécuter la requête de 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); 

    } 
} 

sorcière me donne les minutes comme int, puis il suffit d'exécuter

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); 
} 

suivie

label5.text = GetTotal(); 

et KABOOM fait la somme du temps passé en quelques minutes problèm m résolu

c'est un programme C#, mais je devais les requêtes SQL pour résoudre

MERCI aux personnes qui ont aidé !!

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)); 

Résultat:

08:42:00 

Donc, si vous aviez des données dans une table, il serait tout à fait similaire:

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

Vous devez rester à l'écart des choses comme l'ajout et soustrayant les types date/heure et utilisez les fonctions intégrées telles que DATEADD. Cette abréviation fonctionne avec datetime/smalldatetime mais peut être problématique avec les nouveaux types.

+0

tir merci de faire plutôt que maintenant et la prochaine fois mais maintenant la question est encore comment puis-je ajouter le temps total dans le champ heures travaillées? –

+0

Vous devrez fournir des exemples de données et les résultats souhaités. Je ne peux pas dire à partir de votre fausse requête ce que "temps total" signifie. S'il vous plaît voir http: //dba.blogoverflow.com/2012/06/help-us-help-you/ –

+0

comment obtenir SUM depuis [HOURS_WORKED]? il indique un nom de colonne invalide. –

Questions connexes