J'ai une table MONTANT:
Personne | TypeDeMontant | Montant
----------------------------------
toto | 0 | 50
toto | 1 | 100
mimi | 0 | 20
mimi | 2 | 30
Je cherche à avoir un résultat:
Personne | MontantDeType0 | MontantDeType1 | MontantDeType2
-----------------------------------------------------------
toto | 50 | 100 | 0
mimi | 20 | 0 | 30
Sous Access, ca se fait tout seul avec une requête croisée dynamique, mais sous SQL Server 7, j'ai rien trouvé
Bien sur, y'a la solution utiliser 3 occurences de la table, mais niveau performance, ca va pas le faire.
J'ai néanmoins envisager une solution intermédiaire intéréssante qui consiste à créer une table TYPEMONTANT:
TypeDeMontant | Facteur
-------------------------
0 | 1
1 | 1
2 | 1
Une solution est alors:
SELECT PERSONNE,
SUM(ISNULL(T1.Facteur,0)*M.Montant),
SUM(ISNULL(T2.Facteur,0)*M.Montant),
SUM(ISNULL(T3.Facteur,0)*M.Montant)
FROM MONTANT M, TYPEMONTANT T1, TYPEMONTANT T2, TYPEMONTANT T3
WHERE M.TypeDeMontant*=T1.TypeDeMontant
AND T1.TypeDeMontant=0
AND M.TypeDeMontant*=T2.TypeDeMontant
AND T2.TypeDeMontant=1
AND M.TypeDeMontant*=T3.TypeDeMontant
AND T3.TypeDeMontant=2
GROUP BY PERSONNE
Ca marche, c'est beaucoup moins lourd que la solution bourrin avec 3 occurences de la table MONTANT, mais ca complique beaucoup le code
Auriez vous une meilleure solution ?
Merci d'avance
Message édité par thegti le 28-10-2002 à 10:52:34