Différence de deux colonnes SQL

Signaler
-
yg_be
Messages postés
9432
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 janvier 2020
-
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:

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 ?

2 réponses

Messages postés
3553
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
23 janvier 2020
925
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
Reivax962
Messages postés
3553
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
23 janvier 2020
925
Ça ne ressemble pas aux résultats de la requête que je vous ai transmise...
EBIM20
Messages postés
42
Date d'inscription
vendredi 19 avril 2019
Statut
Membre
Dernière intervention
17 janvier 2020

Bonjour, le résultat est correct mais par contre j'aurai une trentaine d'élements, sur la conception de la requete ça doit etre trop long noN, ci-joint le résultat
EBIM20
Messages postés
42
Date d'inscription
vendredi 19 avril 2019
Statut
Membre
Dernière intervention
17 janvier 2020

En fait, j'aurai besoin d'affecter un code, et un libellé à la différence de ces deux champs, normalement c'est l'idéal mais en tenant compte que j'aurai plsuieurs éléments pensez-vous que c'est faisable?
Reivax962
Messages postés
3553
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
23 janvier 2020
925
Bonjour,

Pour les 30 champs... Le problème vient de la base de données qui les stocke en ligne et non en colonnes. La transposition est toujours quelque chose de délicat en SQL, il faudrait voir exactement ce qui est possible sous SQL Server.

Pour le code et le libellé, c'était ma question de départ : on ne peut pas les inventer... Soit on prend ceux de l'un ou l'autre des champs, soit on en génère un suivant une règle établie.

Xavier
EBIM20
Messages postés
42
Date d'inscription
vendredi 19 avril 2019
Statut
Membre
Dernière intervention
17 janvier 2020

D'accord
Messages postés
9432
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 janvier 2020
503
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:
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
yg_be
Messages postés
9432
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 janvier 2020
503 > EBIM20
Messages postés
42
Date d'inscription
vendredi 19 avril 2019
Statut
Membre
Dernière intervention
17 janvier 2020

cela retourne quoi?
EBIM20
Messages postés
42
Date d'inscription
vendredi 19 avril 2019
Statut
Membre
Dernière intervention
17 janvier 2020

retourne ça
yg_be
Messages postés
9432
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 janvier 2020
503 > EBIM20
Messages postés
42
Date d'inscription
vendredi 19 avril 2019
Statut
Membre
Dernière intervention
17 janvier 2020

es-tu certain que c'est le résultat de la requête proposée en #15?
EBIM20
Messages postés
42
Date d'inscription
vendredi 19 avril 2019
Statut
Membre
Dernière intervention
17 janvier 2020

Oui
yg_be
Messages postés
9432
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 janvier 2020
503 > EBIM20
Messages postés
42
Date d'inscription
vendredi 19 avril 2019
Statut
Membre
Dernière intervention
17 janvier 2020

je pense que la requête en #15 ne retourne que 4 colonnes, d'où viennent les autres?