Select en colonne et non en ligne... [Résolu]

Messages postés
815
Date d'inscription
mercredi 11 octobre 2000
Statut
Membre
Dernière intervention
29 septembre 2010
- - Dernière réponse : Zlub
Messages postés
815
Date d'inscription
mercredi 11 octobre 2000
Statut
Membre
Dernière intervention
29 septembre 2010
- 20 juil. 2005 à 10:25
Salut,







j'ai deux tables une contenant disons,
des personnes et une autre contenant des cours





voici la structure pour l'exemple :



[ Personnes ]




<li>idPer (clé)


</li><li>nom


</li><li>etc


</li>



[ Cours ]




<li>lib


</li><li>date


</li><li>idPer


</li>






exemple de remplissage






[ Personnes ]

1 Dupont ...

2 Durand ...

3 David ...







[ Cours ]











math 01/01/2005 1

math 01/01/2005 3

math 02/01/2005 2

math 03/01/2005 1

angl 02/01/2005 1

angl 03/01/2005 2

Geo 04/01/2005 1

Geo 04/01/2005 2

Geo 04/01/2005 3




je voudrais en une seule requête
sql afficher toutes les libs des cours en colone puis le nom de la
personne.

Et pour chaque personne, dans la colone associée au cours,
marquer le nb de participation cad





Math angl Geo Nom







2 1 1 Dupont

1 1 1 Durand

1 0 1 David



-------------------->



Y





J'ai une solution par le code avec deux
requêtes :




<li>
une pour lister les different
cours + ajouter le libeller « Nom »


</li><li>
une pour compter le nb de presence
de la personne X au cours Y



</li>





mais j'ai besoin d'utiliser une seule
requete SQL... d'instinct je ne pense pas que se soit possible mais
si quelqu'un a une méthode, ça le ferait bien !







Nb: ce n'est pas la structure de ma base, c'est juste histoire que ma demande soit plus facile à comprendre....





++




Zlub
Afficher la suite 

10 réponses

Meilleure réponse
Messages postés
815
Date d'inscription
mercredi 11 octobre 2000
Statut
Membre
Dernière intervention
29 septembre 2010
1
3
Merci
salut,





bon j'ai du mieux ... ça marche sous acess mais j'ai besoin de le faire tourner depuis VB avec ADO...

voici ma requete sous acess



TRANSFORM count(cours.lib) as nb

SELECT personnes.nom

FROM cours INNER JOIN personnes ON cours.idPer = personnes.idPer

GROUP BY personnes.nom

PIVOT cours.lib



quelqu'un a une idée ?



++



Zlub

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Zlub
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
21
0
Merci
Salut



je pense que tu travailles avec ACCESS



regardes les fonction de pivot dans access



http://www.microsoft.com/downloads/details.aspx?FamilyId=AB5AFF5B-A8BA-4C2B-BAB7-EEA1F953C040&displaylang=en

Comme exemple.

Mais je ne les ai pas etudiées
Commenter la réponse de nhervagault
Messages postés
815
Date d'inscription
mercredi 11 octobre 2000
Statut
Membre
Dernière intervention
29 septembre 2010
1
0
Merci
Salut,








Oui pardon, j'ai omis de dire que c'est pour une base Access
Commenter la réponse de Zlub
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
21
0
Merci
Salut



Tu peux directement appellé la requete depuis VB.

C'est le commandtype 'procedure stockée' que tu mets

et en name le nom de la requetee

Et les parametres te permettes de remplir les variables indefinis.

(Les fenetres qui s'ouvrent si on a une colonne incorrecte)



C'est magique ACCESS ;-)

C'est enfantin, mais il faut y penser (je l'ai pas vu beaucoup utiliser cette technique)

Du moins, j'ai pas vu vues beaucoup de sites ou articles présentant cette astuce.





Esperant que ca fonctionne.



Apres tu pourras faire un source sur l'utilisation des PIVOT dans access, car je ne pense pas que c'est présent.

C'est un truc que j'ai decouvert la semaine derniere.

Et qui vient d'etre mis dans SQL 2005.



Access a des fonctions plus puissantes que SQL ?? c'est bizarre.



La base microsoft lien est bourrée de petit truc. Mais j'ai pas eu le temps de la regarder.

Je l'ai trouvé par hasard pour une question du forum. (sur le numeratage des lignes le ranking)





Voila
Commenter la réponse de nhervagault
Messages postés
815
Date d'inscription
mercredi 11 octobre 2000
Statut
Membre
Dernière intervention
29 septembre 2010
1
0
Merci
Salut



vi je sais que je peux stocker dans Access et l'appeler depuis VB mais
je ne peux pas utiliser cette solution ... Je m'explique, le script SQL
est dans un textBox et je souhaite que l'utilisateur puisse modifier la
requete comme il le veut, puis l'executer.... donc il me faut une
requête SQL qui passe en ADO...



thx pour ton idée...




++

Zlub
Commenter la réponse de Zlub
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
21
0
Merci
Je ne comprends pas trop ce que tu veux.



Ta requete peut etre créer dynamiquement.

Regardes du coté de ADOX




Ensuite, utiliser le code suivant :






Sub CreerRequete(Nom As String, SQL As String)
Dim MaCom As New ADODB.Command
Dim MCat As New ADOX.Catalog
Set MCat.ActiveConnection = CurrentProject.Connection
MaCom.CommandText = SQL

MCat.Procedures.Append Nom, MaCom
Set MCat =Nothing
Set MaCom=Nothing
End Sub



Exemple d'utilisation :





CreerRequete "test", "select * from matable"




Il faut faire une reference A


Microsot ADO Ext 2.X for dll and security

X =5,6,7 ou 8

Microsof ActiveX Data Object 2.X Library


Voila
Commenter la réponse de nhervagault
Messages postés
815
Date d'inscription
mercredi 11 octobre 2000
Statut
Membre
Dernière intervention
29 septembre 2010
1
0
Merci
Merci pour ton aide, mais je ne peux pas utiliser autre chose que ADO ...

++

Zlub
Commenter la réponse de Zlub
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
21
0
Merci
C'est du ADO, c'est une extension de ADO fournit pas microsoft.
Commenter la réponse de nhervagault
Messages postés
815
Date d'inscription
mercredi 11 octobre 2000
Statut
Membre
Dernière intervention
29 septembre 2010
1
0
Merci
sql = "..."
cnx.execute sql
et c'est tout ... c'est bien pour ça que je cherche une solution SQL qui passe bien en ADO ...

++

Zlub
Commenter la réponse de Zlub
Messages postés
815
Date d'inscription
mercredi 11 octobre 2000
Statut
Membre
Dernière intervention
29 septembre 2010
1
0
Merci
en fait le TRANSFORM
passe bien depuis ADO ... en fait c'est parceque j'avais installé
access 97 temporairement et je pense que c'est lui qui bloquait...




++

Zlub
Commenter la réponse de Zlub