Menu

Une seule colonne en fonction de plusieurs lignes [Résolu]

Messages postés
14
Date d'inscription
vendredi 19 avril 2019
Statut
Membre
Dernière intervention
20 mai 2019
-
Bonjour,

Pour le traitement de la paie, je suis entrain de préparer une requête (voir requête), mais la problématique est comme suit: j'ai un ensemble d'information à extraire en colonnes en fonction des salariés, la majorité des colonnes à extraire sont des cumuls ( valeurs numériques) qui sont stockées dans une colonne (DecimalValue) de la table 'PaycheckValue', par exemple: le salaire annuel est dans le cumul : 'Salaire_base_ir#' dans la table cumul mais auquel je dois associer la bonne valeur dans la DecimalValue.

SELECT  [T0].[IdPaycheck], [T0].[DecimalValue] AS SALAIREANNUEL,[T0].[DecimalValue] AS BRUT, [T1].[Id], [T1].[IdCatalogueCumul], [T1].[IdEmployee], [T2].[Id] AS [Id1] , [T3].[IdCatalogue], [T3].[UCode], [T3].[IdElement], [T4].[OLCode], [T4].[Description], [T4].[Id] AS [Id2] , [T5].[Address_Address1], [T5].[RegistrationNumber], [T5].[xx_No_C_I_N], [T5].[xx_No_CNSS], [T5].[BirthName], [T5].[Contact_FirstName]
FROM ((((([PaycheckValue] T0

 LEFT OUTER JOIN [Paycheck] T1  ON (([T0].[IdPaycheck] = [T1].[Id])))
 LEFT OUTER JOIN [CatalogueCumul] T2  ON (([T1].[IdCatalogueCumul] = [T2].[Id])))
 LEFT OUTER JOIN [CatalogueLineCumul] T3  ON (([T2].[Id] = [T3].[IdCatalogue])))
 LEFT OUTER JOIN [Cumul] T4  ON (([T3].[IdElement] = [T4].[Id])))
 LEFT OUTER JOIN [Employee] T5  ON (([T1].[UCodeEmployee] = [T5].[UCode])))
WHERE  ((([T5].[VersionStatus] = 1) OR ([T5].[VersionStatus]  IS NULL)))


J'ai vraiment besoin d'aide

Cordialement
Afficher la suite 

Votre réponse

3 réponses

Messages postés
7768
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 mai 2019
464
0
Merci
bonjour, à part la requête SQL, rien n'est clair.
par exemple, je ne comprends pas du tout la phrase suivante:
la majorité des colonnes à extraire sont des cumuls ( valeurs numériques) qui sont stockées dans une colonne (DecimalValue)
comment des colonnes peuvent-elles être stockées dans une colonne?
peux-tu écrire cela autrement, ou donner des exemples?
Commenter la réponse de yg_be
Messages postés
14
Date d'inscription
vendredi 19 avril 2019
Statut
Membre
Dernière intervention
20 mai 2019
0
Merci
En fait le but c'est d'avoir une liste de salariés en ligne et leurs informations en colonnes. Les cumuls dont je parle peuvent être: ( 'salaire annuel', 'montant brut annuel' ...) les codes de ces cumuls sont dans la colonne 'OLCode' de la table Cumul et leurs valeurs sont dans la colonne DecimalValue de la table PaychekValue, Donc il s'agit de récupérer avec la même colonne plusieurs colonnes en utilisant des ALIAS et cela en fonction du cumul par exemple on va prendre la DecimalValue AS Salaire quand le code cumul = 'salaire' ainsi de suite.... J'espère que j'étais un peu plus claire
EBIM20
Messages postés
14
Date d'inscription
vendredi 19 avril 2019
Statut
Membre
Dernière intervention
20 mai 2019
> yg_be
Messages postés
7768
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 mai 2019
-
Le nombre de jour j'avais que des 0 partout et deux lignes par salariés maintenant c réglé merciiii beaucoupp pour votre échange,
yg_be
Messages postés
7768
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 mai 2019
464 > EBIM20
Messages postés
14
Date d'inscription
vendredi 19 avril 2019
Statut
Membre
Dernière intervention
20 mai 2019
-
super! peux-tu alors marquer le sujet comme résolu, via la roue dentée à droite du titre?
EBIM20
Messages postés
14
Date d'inscription
vendredi 19 avril 2019
Statut
Membre
Dernière intervention
20 mai 2019
> yg_be
Messages postés
7768
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 mai 2019
-
Bien sur ;)
EBIM20
Messages postés
14
Date d'inscription
vendredi 19 avril 2019
Statut
Membre
Dernière intervention
20 mai 2019
-
j'ai fait un test pour un seul salarié avec la requête suivante :

SELECT [T5].[RegistrationNumber], [T4].[OLCode], [T0].[DecimalValue]
FROM ((((([PaycheckValue] T0
LEFT OUTER JOIN [Paycheck] T1 ON (([T0].[IdPaycheck] = [T1].[Id])))
LEFT OUTER JOIN [CatalogueCumul] T2 ON (([T1].[IdCatalogueCumul] = [T2].[Id])))
LEFT OUTER JOIN [CatalogueLineCumul] T3 ON (([T2].[Id] = [T3].[IdCatalogue])))
LEFT OUTER JOIN [Cumul] T4 ON (([T3].[IdElement] = [T4].[Id])))
LEFT OUTER JOIN [Employee] T5 ON (([T1].[UCodeEmployee] = [T5].[UCode])))
WHERE ((([T5].[VersionStatus] = 1) OR ([T5].[VersionStatus] IS NULL))) AND [T4].[OLCode]=N'SALAIRE_BASE_IR#' AND [T5].[RegistrationNumber]='0003'
AND (YEAR([T1].PeriodPaye) = 2019)
AND (MONTH([T1].PeriodPaye) = 1) AND [T4].[UCode]=[T0].[UCode]
group by [T5].[RegistrationNumber],[T0].[IdPaycheck], [T4].[OLCode], [T0].[DecimalValue],[T0].[UCode]



et ça donne le bon résultat pour le cumul en question, maintenant j'ai besoin d'aide s'il vous plait, pour faire la même chose pour tous les cumuls dont j'ai besoin et pour tous les salariés de la base,


EBIM20
Messages postés
14
Date d'inscription
vendredi 19 avril 2019
Statut
Membre
Dernière intervention
20 mai 2019
-
Rebonjour , j'ai pu réaliser ma requête sauf qu'elle me retourne plusieurs lignes alors que je dois avoir une seule pour chaque salarié j'ai utilisé le Group by mais ça fonctionne pas , ci-après la requête et merci beaucoup de votre aide ,

SELECT YEAR(Paycheck .PeriodPaye) AS Exercice, MONTH(Paycheck .PeriodPaye) AS Mois,Employee.RegistrationNumber AS Matricule,Employee.EmployeeLastName AS Nom,
Employee.Contact_FirstName AS Prénom, Employee.Address_Address1 AS Adresse, Employee.xx_No_C_I_N AS [N° CIN],Employee.NumberOfResidencePermit AS [Carte Séjour],
Employee.xx_No_CNSS AS [N° CNSS] , Employee.xx_Situation_Famille AS [Situation Familiale],
Employee.xx_Taux_Frais_Professionnels AS [Taux des frais professionnels],
Employee.xx_Nombre_de_Personnes_a_Charge AS [Nbre de personens à charge],
Employee.xx_Date_Autorisation_de_Construire AS [Date d'autorisation de construire],
Employee.xx_Date_Permis_d_Habiter AS [Date permis d'habiter],
PaycheckLine.EmployeeBasis AS [Nbre de Jours],
(case when PaycheckLine.OLCodeItem='G_N_J_T_M#' then PaycheckLine.EmployeeBasis else 0 end) AS NombreJours,
sum(case when Cumul.OLCODE= 'SALAIRE_BASE_IR#' then PaycheckValue.DecimalValue else 0 end) as SALAIREANNUEL,
sum(case when Cumul.OLCODE= 'ABTASS_SS' then PaycheckValue.DecimalValue else 0 end) as BRUT,
sum(case when Cumul.OLCODE= 'AVANTAGE_EN_NATURE_IR#' then PaycheckValue.DecimalValue else 0 end) as [Montant des avantages en argent ou en nature],
sum(case when Cumul.OLCODE= 'INDEMNITES_EXONEREES_IR#' then PaycheckValue.DecimalValue else 0 end) as [Montant des éléments exonérés],
sum(case when Cumul.OLCODE= 'Montant du revenu brut imposable#' then PaycheckValue.DecimalValue else 0 end) as [Montant du revenu brut imposable],
sum(case when Cumul.OLCODE= 'FRAIS_PROFESSIONNELS_IR#' then PaycheckValue.DecimalValue else 0 end) as [Montant des frais professionnels],
sum(case when Cumul.OLCODE= 'MONTANT_SAL_RETRAITE_COMPLEMENT#' then PaycheckValue.DecimalValue else 0 end) as [Montant des cotisations d'assurance retraites],
sum(case when Cumul.OLCODE= 'CUMUL_ECHEANCE_LOGEMENT_IR#' then PaycheckValue.DecimalValue else 0 end) as [Montant des échéances prélevées],
sum(case when Cumul.OLCODE= 'RETENUES_SOCIALES_CNSS_IPE_AMO#' then PaycheckValue.DecimalValue else 0 end) as [Montants des autres retenues],
sum(case when Cumul.OLCODE= 'SALAIRE_BRUT_IMPOSBLE#' then PaycheckValue.DecimalValue else 0 end) as [Montant du revenu net imposable],
sum(case when Cumul.OLCODE= 'IRMOI#' then PaycheckValue.DecimalValue else 0 end) as [I.R. Prélevé]


FROM (((((PaycheckValue
LEFT OUTER JOIN Paycheck ON ((PaycheckValue.IdPaycheck = Paycheck .Id))
LEFT OUTER JOIN PaycheckLine ON Paycheck .Id = PaycheckLine.PaycheckId
LEFT OUTER JOIN CatalogueCumul ON ((Paycheck .IdCatalogueCumul = CatalogueCumul.Id)))
LEFT OUTER JOIN CatalogueLineCumul ON ((CatalogueCumul.Id = CatalogueLineCumul.[IdCatalogue])))
LEFT OUTER JOIN Cumul ON ((CatalogueLineCumul.[IdElement] = Cumul.Id)))
LEFT OUTER JOIN Employee ON ((Paycheck .[UCodeEmployee] = Employee.UCode))))

WHERE (((Employee.[VersionStatus] = 1) OR (Employee.[VersionStatus] IS NULL)))
AND (YEAR(Paycheck .PeriodPaye) = 2019) AND
(MONTH(Paycheck .PeriodPaye) = 1) AND Cumul.UCode=PaycheckValue.UCode AND Employee.[RegistrationNumber]='0003'



Group by
PaycheckValue.IdPaycheck,Employee.RegistrationNumber ,Employee.EmployeeLastName ,

Employee.Contact_FirstName , Employee.Address_Address1, Employee.xx_No_C_I_N ,Employee.NumberOfResidencePermit ,
Employee.xx_No_CNSS , Employee.xx_Situation_Famille,
Employee.xx_Taux_Frais_Professionnels ,
Employee.xx_Nombre_de_Personnes_a_Charge ,
Employee.xx_Date_Autorisation_de_Construire ,
Employee.xx_Date_Permis_d_Habiter ,PaycheckValue.UCode,Paycheck .PeriodPaye,
PaycheckLine.EmployeeBasis,
PaycheckLine.OLCodeItem

Commenter la réponse de EBIM20
Messages postés
14
Date d'inscription
vendredi 19 avril 2019
Statut
Membre
Dernière intervention
20 mai 2019
0
Merci
vous avez compris la majorité du problème sauf que pour chaque salarié de ma liste, DecimalValue doit être remplie selon le OLCode du cumul que l'on veut, non pas vide mais forcement y a des valeurs pour chaque salarié, après c'est moi qui lui précise les OLCode concernés pour qu'il me les affiche dans l'ordre que je veux , j'espère que j'ai répondu à votre question, j'ai un fichier excel sur lesquels j'ai les différents colonnes à remplir , ci-après un aperçu (la valeur de tout ce qui est cumul est dans la colonne DecimalValue) faut alors pouvoir les afficher et les faie correspondre au bon salarié)
Commenter la réponse de EBIM20