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 :

Somme d'une colonne qui dépend d'une autre


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    ertertaertar
    Inscrit en
    Mai 2013
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : ertertaertar

    Informations forums :
    Inscription : Mai 2013
    Messages : 314
    Points : 55
    Points
    55
    Par défaut Somme d'une colonne qui dépend d'une autre
    Bonjour tout le monde, j'ai un petit souci voila je fais un select pour afficher des données de ma base , je voudrai faire la somme des données affichées selon la colonne quantité et Temps_Effectif du coup j'ai fais le SUM sur Quantite mais ce que je fais pour le calcul de la colonne Temps_effectif empêche que les données soient regroupé donc si vous pouvez me dire est ce qu'il ya un moyen de faire le SUM sur la colonne que je calcule du Temps_effectif qui est représentée comme colonne C, voici ma requête avec laquelle je calcule le temps-effectif:

    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
    WITH TMP AS (
    	SELECT 	FORMAT(CAST(INWI.Date AS Date),'yyyy-MM-dd') AS Date,
    			Equipe.Matricule_Paie,
    			INWI.Matricule_FS,
    			Equipe_Cad.Employe,
    			Equipe.Equipe,
    			Projet.Projet,
    			INWI.Quantite,
    			RIGHT('0' + INWI.Tps_Net, 9) C 
    		FROM INWI 
    			INNER JOIN Equipe_Cad  ON INWI.Matricule_FS=Equipe_Cad .MatFS 
    			INNER JOIN Projet ON Projet.EtapeTraitement='INWI_PREPAID'  
    			INNER JOIN Equipe ON INWI.Matricule_FS=Equipe.Matricule_FS 
    		WHERE INWI.Date like '2017-08-01'   
    )  
    SELECT	FORMAT(CAST(Date AS Date),'yyyy-MM-dd')AS Date,
    		Matricule_Paie AS Matricule_BCC,
    		Matricule_FS,Employe AS Nom,Equipe,
    		Projet, 
    		CAST(LEFT(C, 2) AS DECIMAL(10,8)) + 
    			CAST(SUBSTRING(C, 4, 2) AS DECIMAL(10,8)) / 60 + 
    			CAST(SUBSTRING(C, 7, 2) AS DECIMAL(10,8)) / 3600 AS Temps_Effectif,
    		CAST(SUM(Quantite)AS int)AS Quant  
    	FROM TMP 
    	GROUP BY Date, Matricule_Paie ,Matricule_FS,Employe ,Equipe,Projet,C
    je signale encore que je sait que le problème est dans cette ligne de la requête CAST(LEFT(C, 2) AS DECIMAL(10,8)) +
    CAST(SUBSTRING(C, 4, 2) AS DECIMAL(10,8)) / 60 + CAST(SUBSTRING(C, 7, 2) AS DECIMAL(10,8)) / 3600 AS Temps_Effectif
    , mais je ne sais pas comment faire la somme sur cette ligne aussi pour que les données soit regroupées.

    Merci d'avance

  2. #2
    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
    Bonjour,

    Premièrement, votre requête est totalement illisible ! Impossible de vous aider sans la réécrire
    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
    WITH TMP AS (
    	SELECT 	FORMAT(CAST(INWI.Date AS Date),'yyyy-MM-dd') AS Date,
    			Equipe.Matricule_Paie,
    			INWI.Matricule_FS,
    			Equipe_Cad.Employe,
    			Equipe.Equipe,
    			Projet.Projet,
    			INWI.Quantite,
    			RIGHT('0' + INWI.Tps_Net, 9) C 
    		FROM INWI 
    			INNER JOIN Equipe_Cad  ON INWI.Matricule_FS=Equipe_Cad .MatFS 
    			INNER JOIN Projet ON Projet.EtapeTraitement='INWI_PREPAID'  
    			INNER JOIN Equipe ON INWI.Matricule_FS=Equipe.Matricule_FS 
    		WHERE INWI.Date like '2017-08-01'   
    )  
    SELECT	FORMAT(CAST(Date AS Date),'yyyy-MM-dd')AS Date,
    		Matricule_Paie AS Matricule_BCC,
    		Matricule_FS,Employe AS Nom,Equipe,
    		Projet, 
    		CAST(LEFT(C, 2) AS DECIMAL(10,8)) + 
    			CAST(SUBSTRING(C, 4, 2) AS DECIMAL(10,8)) / 60 + 
    			CAST(SUBSTRING(C, 7, 2) AS DECIMAL(10,8)) / 3600 AS Temps_Effectif,
    		CAST(SUM(Quantite)AS int)AS Quant  
    	FROM TMP 
    	GROUP BY Date, Matricule_Paie ,Matricule_FS,Employe ,Equipe,Projet,C
    N'est-ce pas déjà mieux ?

    Maintenant, je ne comprends pas votre problème. Rien ne vous empêche de faire la somme sur votre colonne temps_effectif. Il suffit de mettre un SUM qui englobe tout le calcul.

    Autre possibilité : effectuer le calcul dans le CTE. Ainsi, c'est votre table TMP qui contiendra le calcul tout fait.

    Il faudra juste penser à retirer la colonne C de la clause GROUP BY
    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

  3. #3
    Membre du Club
    Homme Profil pro
    ertertaertar
    Inscrit en
    Mai 2013
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : ertertaertar

    Informations forums :
    Inscription : Mai 2013
    Messages : 314
    Points : 55
    Points
    55
    Par défaut
    Bonjour, quand j'ai essayer le SUM sur le Temps_Effectif mais ca ne me donne aucun résultat et je ne sais pas ou exactement ca doit être avant le Cast ou bien sur la colonne C ou bien où exactement , ca d'une part , et d'une autre part quand je retire la colonne C du group by ca donne une erreur me disant qu'elle doit être contenue dans le group by , voila si tu as une idée comment je peux mettre le SUM dans mon Calcul je te serais reconnaissant .

  4. #4
    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 andyajram Voir le message
    Bonjour, quand j'ai essayer le SUM sur le Temps_Effectif mais ca ne me donne aucun résultat et je ne sais pas ou exactement ca doit être avant le Cast ou bien sur la colonne C ou bien où exactement , ca d'une part
    Tu dois avoir des valeurs NULL. Si tu sommes des valeurs et que tu as au moins une valeur NULL, alors le résultat sera NULL. Tu peux t'en affranchir en utilisant la fonction COALESCE, qui te permet de spécifier la valeur à utiliser lorsqu'une expression te retour

    Citation Envoyé par andyajram Voir le message
    et d'une autre part quand je retire la colonne C du group by ca donne une erreur me disant qu'elle doit être contenue dans le group by , voila si tu as une idée comment je peux mettre le SUM dans mon Calcul je te serais reconnaissant .
    Avec le SUM tu as cette erreur ? Quelle est ta requête ?
    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

  5. #5
    Membre du Club
    Homme Profil pro
    ertertaertar
    Inscrit en
    Mai 2013
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : ertertaertar

    Informations forums :
    Inscription : Mai 2013
    Messages : 314
    Points : 55
    Points
    55
    Par défaut
    non quand je met le SUM comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CAST(LEFT(SUM(C), 2) AS DECIMAL(10,8)) + 
    			CAST(SUBSTRING(SUM(C), 4, 2) AS DECIMAL(10,8)) / 60 + 
    			CAST(SUBSTRING(SUM(C), 7, 2) AS DECIMAL(10,8)) / 3600 AS Temps_Effectif,
    ca me donne
    Le type de données de l'opérande varchar n'est pas valide pour l'opérateur sum.

  6. #6
    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
    Heureusement que j'ai précisé que SUM devait englober tout le calcul...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SUM(CAST(LEFT(C, 2) AS DECIMAL(10,8)) + 
    			CAST(SUBSTRING(C, 4, 2) AS DECIMAL(10,8)) / 60 + 
    			CAST(SUBSTRING(C, 7, 2) AS DECIMAL(10,8)) / 3600) AS Temps_Effectif,
    Sinon, c'est tout à fait normal que SUM ne fonctionne pas sur les chaines de caractères, puisqu'on ne peut sommer que des types numériques.
    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

  7. #7
    Membre du Club
    Homme Profil pro
    ertertaertar
    Inscrit en
    Mai 2013
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : ertertaertar

    Informations forums :
    Inscription : Mai 2013
    Messages : 314
    Points : 55
    Points
    55
    Par défaut
    ouiiiii ca marche maintenant merci beaucoup beaucoup beaucoup c'est très gentil de ta part et merci pour ton temps

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

Discussions similaires

  1. [Linux] - Exécution d'un programme avec une librairie qui dépend d'une autre librairie
    Par neuromencien dans le forum Bibliothèques, systèmes et outils
    Réponses: 1
    Dernier message: 05/02/2017, 11h50
  2. Réponses: 4
    Dernier message: 09/05/2016, 13h52
  3. concevoir une liste qui dépend d'une autre
    Par doomi26 dans le forum Access
    Réponses: 3
    Dernier message: 27/02/2014, 09h27
  4. Réponses: 6
    Dernier message: 28/07/2011, 14h21
  5. Une contrainte qui depend d'une colonne
    Par redabadache3 dans le forum SQL
    Réponses: 2
    Dernier message: 03/11/2007, 13h57

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