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

Développement SQL Server Discussion :

[MS SQL Server 12] Ratio/ Pourcentage temps passé


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 7
    Points
    7
    Par défaut [MS SQL Server 12] Ratio/ Pourcentage temps passé
    Edit : Pouvez vous déplacer mon message dans la partie SQL Server, Merci !

    Bonjour,
    Je bloque sur une problème qui a surement déjà été abordé mais je ne trouve pas de sujet le concernant...

    Nom : cassiop-db-val - Remote Desktop Connection.png
Affichages : 642
Taille : 9,4 Ko

    En faite je souhaiterai rapporter mon SpentTime sur une base 100 par Matricule dans ma colonne RatioSpentTime.
    Mathématiquement je vois très bien mais je n'arrive pas a le retranscrire en SQL...(Pour l'instant je tente que l'affichage du resultat, je verrai après pour l'update de ma table)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT  Matricule,(SpentTime / (SELECT SUM(SpentTime) FROM Temp_ODdePaieWithoutGenius))*100
    FROM Temp_ODdePaieWithoutGenius
    J'imagine bien qu'a un moment il faut que je calcul le SpentTimeTotal par matricule (Group By?) mais je ne vois pas ou....

    Merci par avance pour vos réponses...

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT  
        Matricule
        ,SpentTime / SUM(SpentTime) OVER(PARTITION BY  Matricule)*100
    FROM Temp_ODdePaieWithoutGenius

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    Plus exactement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Matricule, SUM(SpentTime) AS TOTAL,
           100.0 *SUM(SpentTime) / SUM(SpentTime) OVER() AS RATIO_POURCENT
    FROM   Temp_ODdePaieWithoutGenius
    GROUP  BY Matricule;
    Et pour apprendre le SQL :
    Nom : Couverture SQL Synthex 4e ed - 500.jpg
Affichages : 365
Taille : 77,8 Ko

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Merci a vous 2.
    @aieeeuuuuu : Ta solution fonctionne bien !


    @SQLpro : Tellement exact que SSMS met une erreur sur la requête (A prendre avec humour!)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Msg 8120, Level 16, State 1, Line 1
    Column 'Temp_ODdePaieWithoutGenius.SpentTime' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
    Ps : Je viens juste de me procurer ce bouquin, j'attend que le facteur passe pour commencer à le dévorer

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    Si tu respectais la charte de postage, ça nous aiderais !!!

    A lire : http://www.developpez.net/forums/a69...gage-sql-lire/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Ok... Je prend note pour mes prochain sujet.

    Mon objectif est de créer un package ETL avec SSDT 2010, qui sera pas la suite intégré dans mon server SQL 2012. Ce Package aura pour but d'effectuer plusieurs traitement dont celui abordé plus haut.
    Pour ce faire, je souhaite exécuter un tache de requêtes SQL(dans mon package) pour mettre a jour ma table Temp_ODdePaieWithoutGenius, plus particulièrement la colonne RatioSpentTime.

    Le résultat de cette colonne est un prorata par matricule ramener à une base 100. C'est a dire, que pour chaque ligne, le RatioSpentTime = SpentTime diviser par la somme du total des SpentTime par matricule multiplié par 100.

    Ma méthode n'est surement pas la meilleur mais je pense que c'est un bon de départ pour aborder le SQL, SQL Server et SSIS, je n'ai pas le choix, on me demander d'aborder les 3 sujet en même temps...

    Merci par avance pour vos réponses.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Bonjour,
    Je ré ouvre mon sujet car je n'arrive pas à avoir un résultat arrondi à 2 décimal ou la somme des totaux dois être égale 1

    Jeu de test :
    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
    Matricule	Mois	Contract	WorkPackage	SpentTime	RatioSpentTime
    9999	  2015-01-01	test3	        WP1.1	        10
    9999	  2015-01-01	test1	        WP3.1	        10
    9999	  2015-01-01	test1	        WP4.1	        20
    9999	  2015-01-01	test1	        WP5.1	        52
    9999    2015-01-01	test	        WP1.2	        1
    9999	  2015-01-01	test1	       	WP1.3	        30
    9999	  2015-01-01	test1	       	WP1.4	        2
    9999	  2015-01-01	test1	       	WP1.5	        2
    9999 	  2015-01-01	test1	       	WP1.6	        2
    9999	  2015-01-01	test2	       	WP2.1	        2
    9999	  2015-01-01	test3	       	WP2.9	        2
    9999	  2015-01-01	test2	       	WP3.1	        2
    9999	  2015-01-01	test2	       	WP6.1	        5
    9999	  2015-01-01	test2	       	WP2.2	        6
    9999	  2015-01-01	test2	       	WP2.3	        8
    9999	  2015-01-01	test2	       	WP2.4	        2
    9999	  2015-01-01	test2	       	WP2.5	        4
    9999	  2015-01-01	test2		WP2.6	        9
    9999	  2015-01-01	test2	       	WP2.7	        3
    9999	  2015-01-01	test2	       	WP2.8	        6
    Requete de mise à jour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UPDATE  Temp_ODdePaieWithoutGenius  
       SET RatioSpentTime =  SpentTime/
             (SELECT  SUM(SpentTime) 
             FROM   Temp_ODdePaieWithoutGenius sa    
    	 WHERE sa.Matricule = Temp_ODdePaieWithoutGenius.Matricule 
    	          AND sa.Mois = Temp_ODdePaieWithoutGenius.Mois
             ) ;
    Extrait du résultat :
    Nom : [MS SQL Server 12] Ratio Pourcentage temps passé - Répondre à la discussion - Goo.png
Affichages : 351
Taille : 6,6 Ko

    Mon objectif est donc de mettre à jour la colonne RatioSpentTime, avoir un arrondie à 2 décimal, grouper par mois et matricule mais surtout qu'en arrondissant, la somme de tous les RatioSpentTime (par matricule et mois) soit égale à 1.

    Merci d'avance.

  8. #8
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par miniduff Voir le message
    mais surtout qu'en arrondissant, la somme de tous les RatioSpentTime (par matricule et mois) soit égale à 1.
    Impossible. En tout cas simplement. Pourquoi ? Car dans ce cas, pour arrondir un nombre, tu vas avoir besoin de connaître le contexte (= les autres nombres). Par exemple, si tu as 0.455 et 0.545, comment arrondir 0.455 ?
    La règle classique voudrait que ce soit 0.46. De même pour 0.545 qui devient 0.55. Du coup, la somme vaut 1.01. Ca ne marche pas. Si on arrondie au nombre inférieur, alors ta somme vaudra 0.99. Ca ne marche pas non plus.

    Ici, il faut donc arrondir un des nombres au nombre au dessus, et l'autre en dessous. Bref, pour arrondir un nombre, tu dois connaître tous les autres... Je te laisse imaginer l'usine à gaz que cela peut devenir pour calculer ces arrondis....

    La seule possibilité simple que je vois, c'est que tu arrondisses tout tes nombres sauf 1. Le dernier ne sera pas arrondi mais remplacé par (1 - somme(autres nombres)).
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Merci de votre réponse.
    Donc il serait peux être mieux que je garde cette valeur réel pour la suite de mes calculs et "arrondir" en bout de chaîne..
    La fin de mes traitements est un fichier csv généré à destination de SAGE( en import).
    La société externe mettant en place notre solution SAGE m'impose un travail sur 2 décimal et une équilibre parfaite entre les pièces.. Si je me trompe pas il est donc impossible d'avoir un rapport juste ?

Discussions similaires

  1. [Debut Request] [Fin response] Temps passé
    Par ZeKiD dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 11/10/2006, 16h32
  2. Temps passé sur une page !!
    Par nizarsm dans le forum ASP
    Réponses: 4
    Dernier message: 30/06/2006, 21h42
  3. Calcul du temps passé dans les procédures ...
    Par Jloox dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 05/10/2005, 14h31
  4. Calculer le temps passé
    Par Joeleclems dans le forum MFC
    Réponses: 4
    Dernier message: 29/04/2005, 09h40
  5. [FLASH MX] Le temps passe?
    Par nix dans le forum Flash
    Réponses: 3
    Dernier message: 08/02/2005, 08h48

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