begin process at 2012 05 26 20:36:08
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

SQL Server, MSDE, SQL Express

 > 

Requêtes

 > 

Question de PIVOT


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Question de PIVOT

vendredi 16 avril 2010 à 15:17:34 | Question de PIVOT

cudenetf

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


Cette discussion est classée dans : date, id, facture, ea, art


Répondre à ce message

Sujets en rapport avec ce message

Problème de date [ par gregorybts ] Bonjour,JE cherche à ajouter une contrainte sur cette requête, j'aimerai n'obtenir que les factures datant de plus d'un mois.Le problème c'est que déj requete qui fonctionne en local et pas en distant [ par gomoz ] Voici la coupable :<span class="syn Select sans doublon avec date la plus recente [ par ironnyc ] Bonjour a tous!je cherche a faire une requete Select avec une base MySql sur la table suivante: #Table "historique"+-----+-------------+------------+| une requete qui me casse la tête [ par chmouette ] Salut les gens!Mon problème est purement SQL. J'ai une table Ma Table avec des champs tels que :+-------------------------+ !            MaTable  &nbs Resource id #13 [ par raurau ] Bonjour à tousAprés cette requete, j'ai ce message : Resource id #13Je ne comprends pasVoici la requeterequire ("../include/baseassoc.inc"); probleme somme cumulée [ par salimdz2004 ] Bonjour Je veux faire une somme cumulée dans une requête Je veux faire la sommé du mon comment faire cette requette [ par devap ] Salut Je travail avec sqlserver j'ai une table ID-------date1--------date21--------1/12/2008-----30/5/20092--------1/12/2009-----30/6/2010...et une da Pb avg / group by [ par DMK04 ] Bonjour à tous,J'ai cette requête qui marche très bien (elle me retourne des entiers) :SELECT DATEDIFF( MAX( date_livraison ) , date_creation ) AS del Optimiser requête [ par Tipo ] Bonjour, j'ai besoin de sélectionner dans une table de relevés, les enregistrements pour lesquels la date est la plus récente, et seulement si un abon Championnat [ par elpens ] Bonjour,Je voudrais effectuer une base de donnée pour une équipe, et je vous demande de l'aide pour la conception.Je pensais créer une table Saison(id


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,479 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales