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 :

Somme conditionnelle dans une procédure stockée


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    ETUDE
    Inscrit en
    Septembre 2016
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : ETUDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 360
    Points : 117
    Points
    117
    Par défaut Somme conditionnelle dans une procédure stockée
    Bonjour le forum j'ai cette procedure stocké
    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
    SET ANSI_NULLS ON
    GO
     
    SET QUOTED_IDENTIFIER ON
    GO
     
    CREATE PROCEDURE [dbo].[SP_BULLETINPAIE]
    (
    @Date_Debut Date,
    @Date_Fin Date,
    @Nom nvarchar(250)
    )
    as
    SELECT E.[EM_ID],S.[Numero],[Matricule],E.[EM_Nom],E.[EM_Prenom],E.[EM_SECURITE_SOCIAL],E.[EM_CATEGORIE_EMPLOI],S.[SA_ID],S.[LIBELLE],T.[ST_NOM],E.[EM_CATEGORIE],E.[EM_ECHELON],[Date_Debut],[Date_Fin],[MONTANT], 
    sum ( case when  s.sa_id=1  or s.sa_id=2 or s.sa_id=3 or s.sa_id=4 then MONTANT  else null end ) OVER(PARTITION BY E.EM_ID ORDER BY Date_Debut) as Somme_Cumulée
    from  SALAIRE S INNER JOIN Employees E ON S.EM_ID=E.EM_ID
    INNER JOIN STATION T ON T.ST_ID=S.ST_ID
    INNER JOIN [ELEMENTSALAIRES] L ON L.SA_ID=L.SA_ID
    WHERE [Matricule]!='' and [Date_Debut]=@Date_Debut and [Date_Fin]=@Date_Fin and E.[EM_Nom]=@Nom
    group by E.[EM_ID],S.[Numero],[Matricule],E.[EM_Nom],E.[EM_Prenom],E.[EM_SECURITE_SOCIAL],E.[EM_CATEGORIE_EMPLOI],S.[SA_ID],S.[LIBELLE],T.[ST_NOM],E.[EM_ECHELON],[Date_Debut],[Date_Fin],[MONTANT],E.[EM_CATEGORIE]
    GO
    mon objectif étant d'avoir la somme cumulé des salaires de chaque employé lorsque j'imprime les bulletins de paie des employés chaque mois,
    à partir du champ Somme_Cumulée, lorsque je fait la sélection par employer la sa ne marche plus et pour essayer de corriger le problème,j'ai créé
    une vue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    create VIEW [dbo].[VBULLETINSSSS]
    AS
    SELECT E.[EM_ID], 
    sum ( case when  s.sa_id=1  or s.sa_id=2 or s.sa_id=3 or s.sa_id=4 then MONTANT  else null end ) OVER(PARTITION BY E.EM_ID ORDER BY month(Date_Debut)) as Somme_filtree
    from  SALAIRE S INNER JOIN Employees E ON S.EM_ID=E.EM_ID
    INNER JOIN STATION T ON T.ST_ID=S.ST_ID
    INNER JOIN [ELEMENTSALAIRES] L ON L.SA_ID=S.SA_ID
     
    group by E.[EM_ID],[MONTANT],S.SA_ID,month(Date_Debut)
     
    GO
    et lorsque je fait cette requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT  month(Date_Debut),s.[EM_ID],S.[SA_ID],S.[LIBELLE],[Date_Debut],[Date_Fin],[MONTANT], 
    [Somme_filtree]
    from  SALAIRE S 
     JOIN [VBULLETINSSSS] V ON S.EM_ID=V.EM_ID
     
    group by month(Date_Debut),s.[EM_ID],S.[SA_ID],S.[LIBELLE],[Date_Debut],[Date_Fin],[MONTANT],[Somme_filtree]
    ORDER BY s.[EM_ID] ASC
    j’obtiens trop de doublonNom : Capture.PNG
Affichages : 229
Taille : 35,5 Ko
    comment faire pour corrigé se problème

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 101
    Points : 187
    Points
    187
    Par défaut
    C'est votre Somme_filtree qui provoque vos doublons.
    Si vous avez besoin du Total de Somme_Filtree, supprimer MONTANT et Somme_filtree de votre Group By puis effectuer un Sum(Somme_Filtree) ainsi vous n'aurez plus de doublons.

  3. #3
    Membre régulier
    Homme Profil pro
    ETUDE
    Inscrit en
    Septembre 2016
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : ETUDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 360
    Points : 117
    Points
    117
    Par défaut
    Bonjour LapinClair le but rechercher est de maintenir
    le (Montant) et (Somme_Filtrée) mais en éliminant juste les doublons

  4. #4
    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, difficile a dire sans connaitre le modèle, mais je dirai qu'il faudrait ajouter les colonnes ST_ID et SA_Id à la condition de jointure avec la vue

  5. #5
    Membre régulier
    Homme Profil pro
    ETUDE
    Inscrit en
    Septembre 2016
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : ETUDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 360
    Points : 117
    Points
    117
    Par défaut
    Bonsoir aieeeuuuuu même en mettant SA_ID et ST_ID sa ne change rien j’obtiens toujours les doublons
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT DISTINCT  month(Date_Debut),s.[EM_ID],S.[SA_ID],S.[LIBELLE],S.[Date_Debut],S.[Date_Fin],S.[MONTANT], 
    [Somme_filtree]
    from  SALAIRE S 
     JOIN [VBULLETINSSSS] V ON S.EM_ID=V.EM_ID AND S.SA_ID=V.[SA_ID]
     INNER JOIN STATION T ON T.ST_ID=V.ST_ID
    group by month(S.Date_Debut),s.[EM_ID],S.[SA_ID],S.[LIBELLE],S.[Date_Debut],S.[Date_Fin],[MONTANT],[Somme_filtree]
    ORDER BY s.[EM_ID] ASC
    s'il vous plais si vous avez une autre solution à me proposer sa m'arrangerai beaucoup car je suis vraiment coincé

  6. #6
    Membre régulier
    Homme Profil pro
    ETUDE
    Inscrit en
    Septembre 2016
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : ETUDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 360
    Points : 117
    Points
    117
    Par défaut
    Bonjour le forum il Forum il fallait juste ajouter Date_Debut dans les conditions de jointure donc sa marche merci pour votre aide

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

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. Saisie de données dans une procédure stockée
    Par Hastaroth dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/10/2004, 09h54
  3. Vérification du type de données dans une procédure stockée
    Par biroule dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/09/2004, 11h20
  4. Marquer une pause dans une procédure stockée
    Par PéPénet dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/11/2003, 10h42
  5. Transformation de date dans une procédure stockée
    Par bd0606 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/10/2003, 11h31

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