Bonjour,
je souhaite effectuer une requete me permettant de lister tous les achats d'un type de produit (avec affichage qté et n° de facture pour un type de produit
sous sqlexpress2005 ou 2008
cette requette peut renvoyer un nombre de colonnes differents (puisque ma liste n'est pas définitive)
J'ai les tables suivantes :
- article (art_id,art_libelle,art_type)
- achats ( ach_id, date , num_fac )
-elem_achats ( ea_ach_id, ea_art_id, ea_qte, ea_montant)
je voudrais avoir une reponse de la forme (ou en dessous de produit n je met la qté
Date | numero facture | produit 1 |produit 2 | produit 3 |....
22/11/2007 1212 45 23 11
24/11/2007 1345 41 32 10
....
J'ai trouvé sur internet la fonction pivot
comme je passe par c# et que je n'ai pas vu de moyen de tout faire d'un coup
je passe par un premiere requete qui selectionne les produits du type désiré
trié par art_id asc
puis je construit la commande de selection...
au final j'obtiens ceci :
select Date,Facture ,[1] as [produit1] ,[2] as [produit2] ,[3] as [produit3]
from
(
select date facture as Date, num_fac as Facture , ea_art_id, ea_qte from elem_achats join achats on ea_ach_id=ach_id
where ea_art_id in (select art_id from article where art_type='C' )
) o
PIVOT (sum(ea_qte) for ea_art in ( [1],[2],[3])) p
order by Date asc
j'obtiens comme reponse :
Date | Facture | prod1 | prod2 |prod3
22/11/2007 10000 50 45
22/12/2007 20000 40 30
....
(avec quand meme une ligne ou j'ai la date , le n° de facture et aucune qté ...)
J'obtiens quelque chose mais je ne suis pas vraiment "convaincu" ou il y a des coins obscurs en tout cas...
1- Quelque soit l'ordre de [1] , [2], [3] j'obtiens les memes chiffres alors que ce ne sont pas les memes articles
je m'explique , j'ai testé :
select Date,Facture ,[1] as [produit3] ,[2] as [produit2] ,[3] as [produit1]
from
(
select date facture as Date, num_fac as Facture , ea_art_id, ea_qte from elem_achats join achats on ea_ach_id=ach_id
where ea_art_id in (select art_id from article where art_type='C' )
) o
PIVOT (sum(ea_qte) for ea_art in ( [1],[2],[3])) p
order by Date asc
j'obtiens les memes chiffres (ie les chifres ds la 1ere colonne sont tjrs les memes alors que j'aurais voulu qu'ils passent en colonne 3...)
j'obtiens comme reponse :
Date | Facture | prod3 | prod2 |prod1
22/11/2007 10000 50 45
22/12/2007 20000 40 30
....
Qu'est ce que j'ai raté ?
2- Ma colonne 3 est toujours vide (c'est pour cela que j'avais essayé d'inverser les colonnes en triant differemment sur art_id)
alors que si je regarde dans le detail des achats pour le art_id en question j'ai bien des elements avec des qtés....
(on achete generalement ces trois produits en meme temps sur la meme facture...)
Pourriez vous m'aider a trouver pourquoi cela ne fonctionne pas et m'expliquer svp....
egalement m'indiquer s'il y a un moyen de construire la requete "automatiquement"
merci