Différence de deux colonnes SQL
EBIM20
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour, la requête suivante permet d'extraire un code, une description et la valeur de l'élément en question, j'ai en fait besoin d'afficher la différence de deux champs dans la 3ème colonne sans devoir afficher les codes des éléments de l'opération, par ex:
Dans cet exemple, ma prochaine colonne doit m'afficher le montant de GI_DEP_PP#-GI_DEP_PP_IMP# as 'NOM', pourriez vous m'aider SVP ?
SELECT Employee.RegistrationNumber AS Matricule, PaycheckLine.OLCodeItem AS [Code de l'élément exonéré], PaycheckLine.Label AS Description (CASE WHEN PaycheckLine.OLCodeItem='GI_DEP_PP#' THEN PaycheckLine.EmployeeAmount ELSE 0 END) AS [Montant non imposable] (CASE WHEN PaycheckLine.OLCodeItem='GI_DEP_PP_IMP#' THEN PaycheckLine.EmployeeAmount ELSE 0 END) AS [Montant Imposable] FROM ((PaycheckLine LEFT OUTER JOIN Item ON ((PaycheckLine.UCodeItem = Item.UCode)) LEFT OUTER JOIN Paycheck ON ((PaycheckLine.PaycheckId = Paycheck.Id))) LEFT OUTER JOIN Employee ON ((Paycheck.UCodeEmployee = Employee.UCode))) WHERE (((Employee.VersionStatus = 1) OR (Employee.VersionStatus IS NULL)))
Dans cet exemple, ma prochaine colonne doit m'afficher le montant de GI_DEP_PP#-GI_DEP_PP_IMP# as 'NOM', pourriez vous m'aider SVP ?
A voir également:
- Différence de deux colonnes SQL
- Comment faire deux colonnes sur word - Guide
- Formule moyenne excel plusieurs colonnes - Guide
- Inverser deux colonnes excel - Guide
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
- Difference tcp udp - Guide
2 réponses
Bonjour,
Pour ça, il faudrait pouvoir avoir les deux données sur la même ligne, alors qu'elle sont pour l'instant sur deux lignes différentes.
Il y a plusieurs façons de réaliser ça, mais ça va dépendre d'une question préalable : les champs OLCodeItem et Label doivent venir de laquelle des deux lignes ?
Xavier
Pour ça, il faudrait pouvoir avoir les deux données sur la même ligne, alors qu'elle sont pour l'instant sur deux lignes différentes.
Il y a plusieurs façons de réaliser ça, mais ça va dépendre d'une question préalable : les champs OLCodeItem et Label doivent venir de laquelle des deux lignes ?
Xavier
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour, les montants imposables et non imposables sont-ils sur la même ligne, dans la réponse à la requête?
si non, je suggère ceci:
si non, je suggère ceci:
SELECT Employee.RegistrationNumber AS Matricule, PaycheckLine.OLCodeItem AS [Code de l'élément exonéré], PaycheckLine.Label AS Description, sum((CASE WHEN PaycheckLine.OLCodeItem='GI_DEP_PP#' THEN PaycheckLine.EmployeeAmount ELSE 0 END)) AS [Montant non imposable], sum((CASE WHEN PaycheckLine.OLCodeItem='GI_DEP_PP_IMP#' THEN PaycheckLine.EmployeeAmount ELSE 0 END)) AS [Montant Imposable], sum((CASE WHEN PaycheckLine.OLCodeItem='GI_DEP_PP#' THEN PaycheckLine.EmployeeAmount ELSE 0 END)) - sum((CASE WHEN PaycheckLine.OLCodeItem='GI_DEP_PP_IMP#' THEN PaycheckLine.EmployeeAmount ELSE 0 END)) as [partie exoneree] FROM ((PaycheckLine LEFT OUTER JOIN Item ON ((PaycheckLine.UCodeItem = Item.UCode)) LEFT OUTER JOIN Paycheck ON ((PaycheckLine.PaycheckId = Paycheck.Id))) LEFT OUTER JOIN Employee ON ((Paycheck.UCodeEmployee = Employee.UCode))) WHERE (((Employee.VersionStatus = 1) OR (Employee.VersionStatus IS NULL))) group by Employee.RegistrationNumber, PaycheckLine.OLCodeItem, PaycheckLine.Label
et ainsi?
SELECT Employee.RegistrationNumber AS Matricule, sum((CASE WHEN PaycheckLine.OLCodeItem='GI_DEP_PP#' THEN PaycheckLine.EmployeeAmount ELSE 0 END)) AS [Montant non imposable], sum((CASE WHEN PaycheckLine.OLCodeItem='GI_DEP_PP_IMP#' THEN PaycheckLine.EmployeeAmount ELSE 0 END)) AS [Montant Imposable], sum((CASE WHEN PaycheckLine.OLCodeItem='GI_DEP_PP#' THEN PaycheckLine.EmployeeAmount ELSE 0 END)) - sum((CASE WHEN PaycheckLine.OLCodeItem='GI_DEP_PP_IMP#' THEN PaycheckLine.EmployeeAmount ELSE 0 END)) as [partie exoneree] FROM ((PaycheckLine LEFT OUTER JOIN Item ON ((PaycheckLine.UCodeItem = Item.UCode)) LEFT OUTER JOIN Paycheck ON ((PaycheckLine.PaycheckId = Paycheck.Id))) LEFT OUTER JOIN Employee ON ((Paycheck.UCodeEmployee = Employee.UCode))) WHERE (((Employee.VersionStatus = 1) OR (Employee.VersionStatus IS NULL))) group by Employee.RegistrationNumber
en fait j'ai besoin d'afficher le code de l'élément, la decription et une 3èeme colonne qui me calcule la différence de deux éléments dont je précise les codes.
Je ne sais pas si j'ai répondu à votre question?
Aujourd'hui dans ta base, les deux valeurs que tu veux combiner sont stockées sur deux lignes différentes.
Chacune de ces deux lignes contient un code PaycheckLine.OLCodeItem et une description PaycheckLine.Label.
Ma question, peut-être pas très bien posée, c'est celle-là : est-ce que ces codes sont nécessairement identiques ? Si non, lequel doit-on renvoyer ?
Xavier
(PS dans ta requête d'origine, tu écris . Est-ce que cça ne devrait pas plutôt être PaycheckLine.UCodeItem ?)
C'est juste que les deux lignes vont être fusionnées en une seule dans le résultat ; or tu demandes d'autres champs de ces deux lignes ! Donc ma question, c'est comment on choisit lequel des deux on affiche...
Pour te faire comprendre ce que je veux dire, je te propose cette requête-là qui résout ton problème mais pourra donner des infos en trop :
Tu vois que tu as deux fois les Codes et Label, et ma question était simplement de savoir lequel choisir...
Xavier