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 :

Faire une somme conditionnelle [2014]


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    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
    Par défaut Faire une somme conditionnelle
    bonjour le forum j'ai créé une table pour pour la gestion des salaires des employé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
    CREATE TABLE [dbo].[PRIMEETRETENU](
    	[Numero] [int] NOT NULL,
    	[Matricule] [int] NULL,
    	[C.N.I] [varchar](100) NULL,
    	[Nom] [nvarchar](250) NULL,
    	[Prenom] [nvarchar](150) NULL,
    	[IDCATEGORIE] [nvarchar](100) NULL,
    	[CATEGORIE_EMPLOI] [nvarchar](250) NULL,
    	[IDSTATION] [nvarchar](100) NULL,
    	[NOM_STATION] [nvarchar](250) NULL,
    	[SECURITE_SOCIAL] [nvarchar](100) NULL,
    	[CATEGORIE] [nvarchar](250) NULL,
    	[BASEETPRIME] [nvarchar](250) NULL,
    	[MONTANT] [float] NULL DEFAULT ((0)),
    	[RETENU] [nvarchar](250) NULL,
    	[TAUX] [float] NULL DEFAULT ((0)),
    	[Date_Debut] [date] NULL,
    	[Date_Fin] [date] NULL,
    	[PRETS] [float] NOT NULL DEFAULT ((0)),
    	[ACOMPTE] [float] NOT NULL DEFAULT ((0)),
    	[TOTALPRET] [float] NOT NULL DEFAULT ((0)),
    	[MANQUANT] [float] NOT NULL DEFAULT ((0)),
    	[PRET]  AS ([PRETS]+[MANQUANT]),
    	[ESTEPRET]  AS ([TOTALPRET]-[PRETS]),
    	[SALAIRGLOBALE] [float] NOT NULL DEFAULT ((0))
    ) ON [PRIMARY]
     
    GO
     
    SET ANSI_PADDING OFF
    GO
    et ensuite j'ai créé une une vue pour calculer les éléments de salaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT [Date_Debut],[Date_Fin],[Matricule],[C.N.I],[Nom],[Prenom],[CATEGORIE_EMPLOI],[IDSTATION],[NOM_STATION],[SECURITE_SOCIAL],[CATEGORIE],[TAXABLE],[RETENUE],[ACOMPTE],[RESTEPRET],[MANQUANT],[BRUT],[IRPP],[CACIRPP],[TC],[CFC],[RAV],[PVID],
    ([IRPP]+[CACIRPP]+[TC]+[CFC]+[RAV]) AS IMPOS,
    ([TAXABLE]-[IRPP]-[CACIRPP]-[TC]-[CFC]-[RAV]) AS NETIMPOSABLE,
    ([TAXABLE]-[IRPP]-[CACIRPP]-[TC]-[CFC]-[RAV]-[PVID]-[RETENUE]-[ACOMPTE]-[MANQUANT]) AS NETAPAYER
    FROM [dbo].[VBULLETINPAIE]
    mon soucis est de créé une colonne supplémentaire pour déterminer la somme des salaires de chaque employé tel que à chaque remplissage le salaire du mois s'ajoute sur les salaires des mois précédentes pour chaque employé j'ai donc pensé au sous requête mais je ne sais comment m'y prendre est t'il possible de faire cela dans la même vue? Merci

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 636
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Votre table est extrêmement mal modélisée :
    - le nombre de colonnes "nullables" est symptomatique d'une modélisation à plat
    - d'autres colonnes sont définies en "not null" mais sont elles aussi typiques d'une modélisation à plat, par exemple "pret" et "acompte" : tout employé n'a pas fait de prêt ni demandé d'acompte
    - vous stockez des valeurs calculées : "prets", "estepret"
    - le type float est inadapté pour des salaires, car imprécis pour la partie décimale
    - enfin et surtout répéter le nom, le prénom, le matricule etc... chaque mois est à peu près ce que l'on peut faire de pire

    Donc, commencez par le début, modélisez une base qui respecte les formes normales

  3. #3
    Membre éclairé
    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
    Par défaut
    Bonjour escartefigue et merci pour votre réponse j’avoue vraiment ne pas comprendre lorsque vous parler de la modélisation à plat et je ne suis pas pour le moment un professionnel de la programmation pouvez vous m'aider à comprendre mieux?

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 636
    Billets dans le blog
    10
    Par défaut
    Prenons quelques attributs de votre table, par exemple nom, prénom, net à payer et date de début et de fin de période salariale

    Le nom et le prénom dépendent uniquement de l'identifiant de la personne (probablement la 1ère colonne "numéro" de votre table), ils ne changent pas chaque mois

    Le net à payer, la date de début et la date de fin de période salariale eux, dépendent à la fois de l'identifiant de la personne (chaque employé n'ayant pas le même salaire) et de la période (il peut y avoir des augmentations, des primes, des retenues particulières chaque mois)

    Au niveau conceptuel, il fallait donc modéliser pour cet exemple simplifié
    EMPLOYE(EM_id, EM_nom, EM_prenom....) 0,n --- recevoir --- (1,1) SALAIRE(EM_ID, SA_ID, SA_dtdeb, SA_dtfin, SA_mtnet....)

    Ce qui donne ici deux tables EMPLOYE et SALAIRE pour ce modèle très réduit

  5. #5
    Membre éclairé
    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
    Par défaut
    ok merci escartefigue j'essais et je vous tien informer

  6. #6
    Membre éclairé
    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
    Par défaut
    Bonsoir escartefigue jespere avoir finalement créé des tables qui réponde au norme
    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
    SET ANSI_NULLS ON
    GO
     
    SET QUOTED_IDENTIFIER ON
    GO
     
    CREATE TABLE [dbo].[SALAIRE](
    	[Numero] [int] NOT NULL,
    	[EM_ID] [int] NOT NULL,
    	[SA_ID] [int] NOT NULL,
    	[ST_ID] [nvarchar](100) NULL,
    	[Date_Debut] [date] NULL,
    	[Date_Fin] [date] NULL,
    	[LIBELLE] [nvarchar](250) NULL,
    	[MONTANT] [decimal](18, 0) NULL DEFAULT ((0))
    ) ON [PRIMARY]
     
    GO
     
    ALTER TABLE [dbo].[SALAIRE]  WITH CHECK ADD  CONSTRAINT [SALAIRE_ELEMENTSALAIRES] FOREIGN KEY([SA_ID])
    REFERENCES [dbo].[ELEMENTSALAIRES] ([SA_ID])
    GO
     
    ALTER TABLE [dbo].[SALAIRE] CHECK CONSTRAINT [SALAIRE_ELEMENTSALAIRES]
    GO
     
    ALTER TABLE [dbo].[SALAIRE]  WITH CHECK ADD  CONSTRAINT [SALAIRE_Employees] FOREIGN KEY([EM_ID])
    REFERENCES [dbo].[Employees] ([EM_ID])
    GO
     
    ALTER TABLE [dbo].[SALAIRE] CHECK CONSTRAINT [SALAIRE_Employees]
    GO
     
    ALTER TABLE [dbo].[SALAIRE]  WITH CHECK ADD  CONSTRAINT [SALAIRE_STATION] FOREIGN KEY([ST_ID])
    REFERENCES [dbo].[STATION] ([ST_ID])
    GO
     
    ALTER TABLE [dbo].[SALAIRE] CHECK CONSTRAINT [SALAIRE_STATION]
    GO
    je souhaite donc à partir de cette table créé une colonne dans une vue qui fait somme des salaire tel-que le salaire de chaque mois s'ajoute sur le salaire des mois précédente pouvez m'aider s'il vous plais

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

Discussions similaires

  1. Comment faire une somme conditionnelle ?
    Par Celine_1989 dans le forum Développement
    Réponses: 7
    Dernier message: 16/04/2015, 15h41
  2. faire une somme conditionnelle
    Par antoine dpt dans le forum VBA Access
    Réponses: 1
    Dernier message: 18/02/2010, 15h36
  3. Faire une somme conditionnelle
    Par pilpoil dans le forum Excel
    Réponses: 6
    Dernier message: 10/08/2007, 14h46
  4. filtrer saisies et faire une somme globale
    Par mcellier dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/09/2005, 17h00
  5. faire une somme dans un état
    Par PAINCO dans le forum Access
    Réponses: 1
    Dernier message: 23/06/2005, 19h41

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