Une seule colonne en fonction de plusieurs lignes

Résolu/Fermé
EBIM20 Messages postés 42 Date d'inscription vendredi 19 avril 2019 Statut Membre Dernière intervention 25 avril 2021 - Modifié le 17 mai 2019 à 16:45
EBIM20 Messages postés 42 Date d'inscription vendredi 19 avril 2019 Statut Membre Dernière intervention 25 avril 2021 - 20 mai 2019 à 14:48
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
A voir également:

3 réponses

yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
17 mai 2019 à 22:40
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?
0
EBIM20 Messages postés 42 Date d'inscription vendredi 19 avril 2019 Statut Membre Dernière intervention 25 avril 2021
18 mai 2019 à 00:38
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
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
Modifié le 18 mai 2019 à 11:01
donc ta requête te donne exactement ce que tu veux (le bon nombre de lignes), à part que la colonne SALAIREANNUEL devrait être en fait plusieurs colonnes, correspondant à tous les valeurs possibles de OLCode? sur chaque ligne, une seule de ces colonnes serait remplie, les autres étant vides?
si ce n'est pas cela, donne un exemple.

connais-tu les valeurs possibles de OLCode?
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
18 mai 2019 à 11:41
peut-être ainsi:
SELECT  [T0].[IdPaycheck],   [T5].[Address_Address1], [T5].[RegistrationNumber], [T5].[xx_No_C_I_N], [T5].[xx_No_CNSS], [T5].[BirthName], [T5].[Contact_FirstName], 
sum(case when [T4].[OLCode]= 'salaire annuel' then [T0].[DecimalValue] else 0 end) as SALAIREANNUEL,
sum(case when [T4].[OLCode]= 'montant brut annuel' then [T0].[DecimalValue] else 0 end) as BRUT
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)))
group by
[T0].[IdPaycheck], [T5].[Address_Address1], [T5].[RegistrationNumber], [T5].[xx_No_C_I_N], [T5].[xx_No_CNSS], [T5].[BirthName], [T5].[Contact_FirstName]
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
18 mai 2019 à 15:48
as-tu essayé la suggestion en #4?
0
EBIM20 Messages postés 42 Date d'inscription vendredi 19 avril 2019 Statut Membre Dernière intervention 25 avril 2021
19 mai 2019 à 01:56
OUI mais ça donne pas les bonnes valeurs
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476 > EBIM20 Messages postés 42 Date d'inscription vendredi 19 avril 2019 Statut Membre Dernière intervention 25 avril 2021
19 mai 2019 à 12:23
"pas les bonnes valeurs", peux-tu être plus précis?
0
EBIM20 Messages postés 42 Date d'inscription vendredi 19 avril 2019 Statut Membre Dernière intervention 25 avril 2021
18 mai 2019 à 15:12
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é)
0