Requête avec plusieurs IF
Résolu
Oholabi12345
Messages postés
498
Date d'inscription
Statut
Membre
Dernière intervention
-
Oholabi12345 Messages postés 498 Date d'inscription Statut Membre Dernière intervention -
Oholabi12345 Messages postés 498 Date d'inscription Statut Membre Dernière intervention -
Bonjour, Dans ma base de données précedente ; j'ai la requete REQ_PAIE qui permet de calculer les salaires et je dois ajouter un champ calculé qui sur excel fonctionne très bien et se présente ainsi sous excel: CN=
SI(PRODUIT(ARRONDI(PRODUIT(I16;0,001);0);1000)*0,8<=50000;0;SI(ET(PRODUIT(ARRONDI(PRODUIT(I16;0,001);0);1000)*0,8>50000;PRODUIT(ARRONDI(PRODUIT(I16;0,001);0);1000)*0,8<=130000)*0,8;PRODUIT(PRODUIT(ARRONDI(PRODUIT(I16;0,001);0);1000)*0,8-50000;0,015);SI(ET(PRODUIT(ARRONDI(PRODUIT(I16;0,001);0);1000)*0,8>130000;PRODUIT(ARRONDI(PRODUIT(I16;0,001);0);1000)*0,8<=200000);SOMME(PRODUIT(PRODUIT(ARRONDI(PRODUIT(I16;0,001);0);1000)*0,8-130000;0,05);1200);SOMME(4700;PRODUIT(PRODUIT(ARRONDI(PRODUIT(I16;0,001);0);1000)*0,8-200000;0,1)))))
peut on l’intégrer en champ calculé dans cette instruction SQL:
SELECT PAIE.NUMERO_BULLETIN, PAIE.Date, PAIE.NOMBRE_JOUR, PAIE.CODE_EMPLOYE, EMPLOYE.NOM_EMPLOYE, EMPLOYE.NUMERO_CNPS, EMPLOYE.PRENOM_EMPLOYE, EMPLOYE.TITRE, EMPLOYE.ADRESSE, EMPLOYE.EMPLOI_OCCUPE, EMPLOYE.ID_SERVICE, SERVICE.DESIGNATION_SRVICE, EMPLOYE.ETABLISSEMENT_BANCAIRE, EMPLOYE.NUMERO_COMPTE_BANCAIRE, EMPLOYE.ID_CATEGORIE, CATEGORIE.LIBELLE_CATEGORIE, CATEGORIE.TAUX_CATEGORIEL, PAIE.SURSALAIRE, EMPLOYE.TAUX_TRANSPORT, [TAUX_TRANSPORT]*[NOMBRE_JOUR] AS TRANSPORT, PAIE.AUTRES_INDEMNITES, PAIE.CONGES, PAIE.[PRIME_D'ANCIENNETE], [NOMBRE_JOUR]*[TAUX_CATEGORIEL] AS [SALAIRE CATEGORIEL], [SALAIRE CATEGORIEL]*0.012 AS ITS, PAIE.GRATIFICATION, [SALAIRE CATEGORIEL]+[CONGES]+[PRIME_D'ANCIENNETE]+[SURSALAIRE]+[GRATIFICATION] AS [SALAIRE BRUT], EMPLOYE.VILLE
FROM SERVICE INNER JOIN ((CATEGORIE INNER JOIN EMPLOYE ON CATEGORIE.ID_CATEGORIE = EMPLOYE.ID_CATEGORIE) INNER JOIN PAIE ON EMPLOYE.CODE_EMPLOYE = PAIE.CODE_EMPLOYE) ON SERVICE.ID_SERVICE = EMPLOYE.ID_SERVICE;
la case I16 en excel représente dans la requete le champ [SALAIRE BRUT]
SI(PRODUIT(ARRONDI(PRODUIT(I16;0,001);0);1000)*0,8<=50000;0;SI(ET(PRODUIT(ARRONDI(PRODUIT(I16;0,001);0);1000)*0,8>50000;PRODUIT(ARRONDI(PRODUIT(I16;0,001);0);1000)*0,8<=130000)*0,8;PRODUIT(PRODUIT(ARRONDI(PRODUIT(I16;0,001);0);1000)*0,8-50000;0,015);SI(ET(PRODUIT(ARRONDI(PRODUIT(I16;0,001);0);1000)*0,8>130000;PRODUIT(ARRONDI(PRODUIT(I16;0,001);0);1000)*0,8<=200000);SOMME(PRODUIT(PRODUIT(ARRONDI(PRODUIT(I16;0,001);0);1000)*0,8-130000;0,05);1200);SOMME(4700;PRODUIT(PRODUIT(ARRONDI(PRODUIT(I16;0,001);0);1000)*0,8-200000;0,1)))))
peut on l’intégrer en champ calculé dans cette instruction SQL:
SELECT PAIE.NUMERO_BULLETIN, PAIE.Date, PAIE.NOMBRE_JOUR, PAIE.CODE_EMPLOYE, EMPLOYE.NOM_EMPLOYE, EMPLOYE.NUMERO_CNPS, EMPLOYE.PRENOM_EMPLOYE, EMPLOYE.TITRE, EMPLOYE.ADRESSE, EMPLOYE.EMPLOI_OCCUPE, EMPLOYE.ID_SERVICE, SERVICE.DESIGNATION_SRVICE, EMPLOYE.ETABLISSEMENT_BANCAIRE, EMPLOYE.NUMERO_COMPTE_BANCAIRE, EMPLOYE.ID_CATEGORIE, CATEGORIE.LIBELLE_CATEGORIE, CATEGORIE.TAUX_CATEGORIEL, PAIE.SURSALAIRE, EMPLOYE.TAUX_TRANSPORT, [TAUX_TRANSPORT]*[NOMBRE_JOUR] AS TRANSPORT, PAIE.AUTRES_INDEMNITES, PAIE.CONGES, PAIE.[PRIME_D'ANCIENNETE], [NOMBRE_JOUR]*[TAUX_CATEGORIEL] AS [SALAIRE CATEGORIEL], [SALAIRE CATEGORIEL]*0.012 AS ITS, PAIE.GRATIFICATION, [SALAIRE CATEGORIEL]+[CONGES]+[PRIME_D'ANCIENNETE]+[SURSALAIRE]+[GRATIFICATION] AS [SALAIRE BRUT], EMPLOYE.VILLE
FROM SERVICE INNER JOIN ((CATEGORIE INNER JOIN EMPLOYE ON CATEGORIE.ID_CATEGORIE = EMPLOYE.ID_CATEGORIE) INNER JOIN PAIE ON EMPLOYE.CODE_EMPLOYE = PAIE.CODE_EMPLOYE) ON SERVICE.ID_SERVICE = EMPLOYE.ID_SERVICE;
la case I16 en excel représente dans la requete le champ [SALAIRE BRUT]
Configuration: Windows / Firefox 92.0
A voir également:
- Quelle requête écrire pour demander au moteur de recherche de présenter de préférence les pages web traitant de tennis mais pas de tennis de table ?
- Impossible de supprimer une page word - Guide
- Table ascii - Guide
- Creation de site web - Guide
- Table de matière word - Guide
- Google moteur de recherche page d'accueil - Guide
1 réponse
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
en SQL, la fonction iif() permet de faire le même genre de calcul.
avant de "traduire" cette formule en SQL, je suggère de sérieusement la simplifier.
d'une part, la fonction "produit()" rend la formule illisible.
je vois même PRODUIT(PRODUIT()), encore moins lisible.
d'autre part, certains tests sont inutiles:
par exemple, quand on est dans le "else" du test
je vois aussi que, dans la formule, on multiplie le résultat de la fonction ET() par 0.8: sans doute une erreur.
en SQL, la fonction iif() permet de faire le même genre de calcul.
avant de "traduire" cette formule en SQL, je suggère de sérieusement la simplifier.
d'une part, la fonction "produit()" rend la formule illisible.
je vois même PRODUIT(PRODUIT()), encore moins lisible.
d'autre part, certains tests sont inutiles:
par exemple, quand on est dans le "else" du test
PRODUIT(ARRONDI(PRODUIT(I16;0,001);0);1000)*0,8<=50000, il est inutile de tester
PRODUIT(ARRONDI(PRODUIT(I16;0,001);0);1000)*0,8>50000, cela ne fait qu'alourdir et obscurcir la formule.
je vois aussi que, dans la formule, on multiplie le résultat de la fonction ET() par 0.8: sans doute une erreur.
Cette instructions je la mets à quel niveau
Exemple : PRODUIT(ARRONDI(PRODUIT(I16;0,001);0);1000)*0,8<=130000 )*0,8;
Pour le reste je pense pouvoir m'en sortir
Merci