IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Afficher un resultat supérieur a 24h


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2007
    Messages : 81
    Points : 56
    Points
    56
    Par défaut Afficher un resultat supérieur a 24h
    Bonjour,
    je créée actuellement une application de planning. Pour cela j'utilise une base de données sous sql serveur. Pour voir ce qu'une personne à fait en 1 semaine, j'additionne les temps qu'elle à réalisé mais le problème c'est que lorsque la personne a travaillé plus de 24h mon total repars de 0.
    Quelqu'un aurai-t-il une piste pour m'aider s'il vous plait?

    Merci par avance.

  2. #2
    Membre habitué Avatar de SILO
    Inscrit en
    Mars 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mars 2002
    Messages : 192
    Points : 130
    Points
    130
    Par défaut
    Quel type de donnée utilises tu pour le temps?

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2007
    Messages : 81
    Points : 56
    Points
    56
    Par défaut
    mon temps est en datetime: je fais ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT
    	CONVERT(VARCHAR, CONVERT(DATETIME,SUM(TEMPS),108), 108) AS TOTAL

    je me suis apercu que ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT
    	CONVERT(FLOAT,SUM(TEMPS),108)*24 AS TOTAL
    me renvoie le bon nombre d'heures mais les minutes secondes se trouvent apres la virgule
    le resultat est le suivant:

    28,84262222222232

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2007
    Messages : 81
    Points : 56
    Points
    56
    Par défaut
    J'ai trouvé une réponse à ma question qui pourrai s'avérer utile à plusieurs personnes. La voici.
    Je ne sais pas si ce code est optimal par contre. Il fonctionne parfaitement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT
    	CONVERT(VARCHAR,CAST(CONVERT(FLOAT,SUM(TEMPS),108)*24 AS INT))
    	+':'+
    	CONVERT(VARCHAR,CAST((CONVERT(FLOAT,SUM(TEMPS),108)*24-CAST(CONVERT(FLOAT,SUM(TEMPS),108)*24 AS INT))*60 AS INT))
    	+':'+
    	CONVERT(VARCHAR,CAST(((CONVERT(FLOAT,SUM(TEMPS),108)*24-CAST(CONVERT(FLOAT,SUM(TEMPS),108)*24 AS INT))*60-CAST((CONVERT(FLOAT,SUM(TEMPS),108)*24-CAST(CONVERT(FLOAT,SUM(TEMPS),108)*24 AS INT))*60 AS INT))*60 AS INT)) AS TOTAL

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    C'est dommage que vous ayez oublié l'opérateur modulo (% en T-SQL).
    Vous devriez stocker le temps travaillé en secondes, cela vous apporterait plus de facilités

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    CREATE TABLE TbEmploye
    (
    	IDEmploye INT IDENTITY CONSTRAINT PK_TbEmploye PRIMARY KEY,
    	nomEmploye VARCHAR(20)
    )
    GO
     
    INSERT INTO dbo.TbEmploye VALUES ('ElSuket')
    INSERT INTO dbo.TbEmploye VALUES ('18carats')
    GO
     
    CREATE TABLE TbTempsDeTravail
    (
    	IDEmploye INT NOT NULL CONSTRAINT FK_TbTempsDeTravail_IDEmploye FOREIGN KEY (IDEmploye) REFERENCES dbo.TbEmploye,
    	Date DATETIME NOT NULL,
    	TempsDeTravail_Secondes INT
    )
    GO
     
    -- Population de la table TbEmploye pour ElSuket
    WITH
    	CTE_TEMPS_TRAVAIL_ELSUKET AS
    	(
    			SELECT CAST(FLOOR(CAST(DATEADD(day, -DATEPART(weekday, GETDATE()) + 1, GETDATE()) AS FLOAT)) AS DATETIME) Jour, -- Lundi dernier
    					8 * 3600 Duree
    		UNION ALL
    			SELECT DATEADD(day, 1, Jour),
    					Duree + 1800
    			FROM CTE_TEMPS_TRAVAIL_ELSUKET
    			WHERE Jour < DATEADD(day, 4 - DATEPART(weekday, GETDATE()), GETDATE()) -- Vendredi prochain
    	)
    INSERT INTO TbTempsDeTravail
    SELECT 1, Jour, Duree
    FROM CTE_TEMPS_TRAVAIL_ELSUKET
    GO
     
    -- Population de la table TbEmploye pour 18Carats
    WITH
    	CTE_TEMPS_TRAVAIL_18CARATS AS
    	(
    			SELECT CAST(FLOOR(CAST(DATEADD(day, -DATEPART(weekday, GETDATE()) + 1, GETDATE()) AS FLOAT)) AS DATETIME) Jour, -- Lundi dernier
    					8 * 3600 Duree
    		UNION ALL
    			SELECT DATEADD(day, 1, Jour),
    					Duree + 3600 -- Vous travaillez plus que moi !
    			FROM CTE_TEMPS_TRAVAIL_18CARATS
    			WHERE Jour < DATEADD(day, 4 - DATEPART(weekday, GETDATE()), GETDATE()) -- Vendredi prochain
    	)
    INSERT INTO TbTempsDeTravail
    SELECT 2, Jour, Duree
    FROM CTE_TEMPS_TRAVAIL_18CARATS
    GO
     
    -- Combien de temps avons-nous travaillé cette semaine ?
    WITH
    	CTE_TempsDeTravail AS
    	(
    		SELECT IDEmploye, SUM(TempsDeTravail_Secondes) TempsDeTravailTotal
    		FROM dbo.TbTempsDeTravail
    		WHERE DATEPART(week, Date) = DATEPART(week, GETDATE())
    		GROUP BY IDEmploye
    	)
    SELECT nomEmploye,
    		CAST(TempsDeTravailTotal / 3600 AS VARCHAR) + ':' + 
    		CASE
    			WHEN ((TempsDeTravailTotal / 60) % 60) < 10 THEN '0' + CAST((TempsDeTravailTotal / 60) % 60 AS VARCHAR)
    			ELSE CAST((TempsDeTravailTotal / 60) % 60 AS VARCHAR)
    		END + ':' +
    		CASE
    			WHEN ((TempsDeTravailTotal % 86400) % 60) < 10 THEN '0' + CAST((TempsDeTravailTotal % 86400) % 60 AS VARCHAR)
    			ELSE CAST((TempsDeTravailTotal % 86400) % 60 AS VARCHAR)
    		END AS TempsDeTravailHH_MM_SS
    FROM dbo.TbEmploye E
    JOIN CTE_TempsDeTravail T ON T.IDEmploye = E.IDEmploye
    Ce script crée une table d'employés, dont vous et moi sommes les hôtes.
    Ensuite il peuple la table de temps de travail avec la date (partie heure à 0) en secondes.

    Résultat :

    nomEmploye TempsDeTravailHH_MM_SS
    -----------------------------------------------------
    ElSuket 45:00:00
    18carats 50:00:00
    Dès lors la requête de recherche du temps de travail, qui est la dernière de ce script, devient très simple, avec une petite CTE.
    Vous pouvez utiliser les CTE depuis SQL Server 2005.
    Si vous êtes en 2000, faites-moi signe

    Dans la table des temps de travail, vous pouvez aussi ajouter une colonne d'année et une colonne de semaine, ce qui simplifie encore plus la requête finale


    @++

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2007
    Messages : 81
    Points : 56
    Points
    56
    Par défaut
    Bonjour,
    effectivemment je suis d'accord avec cette solution qui parrait en effet plus simple mais je ne peux me permettre de stocker les temps en secondes (désir de l'employeur) je dois donc me contenter des datetime et de tous les calculs qui s'en suivent...

  7. #7
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Comment stockez vous actuellement les temps de travail ?
    Le mieux reste que vous nous donniez le script DDL de création de votre table, de sorte que nous sachions tous comment vous stockez les temps de travail.

    @++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [rave report 5.0] afficher le resultat d'un calcul
    Par webbulls dans le forum Bases de données
    Réponses: 10
    Dernier message: 16/07/2009, 12h14
  2. [MySQL] Comment afficher le resultat d 1 requete à 1DB ds 1 tableau
    Par pierrot10 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/10/2005, 12h03
  3. Comment afficher le resultat d'une requete?
    Par Looping94510 dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 11/02/2005, 08h42
  4. Réponses: 4
    Dernier message: 03/11/2004, 12h09
  5. [web] afficher le résultat d'un script cgi en perl
    Par Leishmaniose dans le forum Web
    Réponses: 8
    Dernier message: 10/06/2004, 18h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo