IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Sélections aléatoires imbriquées dans plusieurs champs


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier Avatar de keketteboy
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2008
    Messages : 100
    Points : 73
    Points
    73
    Par défaut Sélections aléatoires imbriquées dans plusieurs champs
    Bonjour à tous et à toutes.

    Je souhaiterais tout d'abord savoir s'il est possible de faire des sélections aléatoires imbriquées dans plusieurs champs différents sous ACCESS/SQL ? Je m'explique : je souhaiterais, par exemple, sélectionner dans ma base de données 50 écoles de manière aléatoire. Au sein de chacune de ces 50 écoles je souhaiterais sélectionner encore de manière aléatoire, la note par matière (français et mathématiques) de 3 élèves pour chacun des niveaux suivants : CP, CE2 et CM2.

    Donc j'obtiendrai de manière aléatoire, la note par matière de 3 élèves par niveau (prédéterminés à l'avance) de 50 écoles prises aléatoirement.

    Voici ma première requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT TOP 50 *
    FROM [EcolesDVP.com]
    WHERE ((([EcolesDVP.com].[NiveauClasse]) In ("CP","CE2","CM2")))
    ORDER BY Rnd([NomEcole]);
    Première requête que je nomme, par exemple, "SélectionEcoles". A partir de cette requête, je réitère mon raisonnement précédent avec une seconde requête imbriquée cette fois-ci :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT TOP 3 [SélectionEcoles].[Matière], [SélectionEcoles].[NoteMatière]
    FROM [SélectionEcoles]
    GROUP BY [SélectionEcoles].[Matière], [SélectionEcoles].[NoteMatière], [SélectionEcoles].[NomElève]
    ORDER BY Rnd([NomElève]);

    Je me suis heurté à un message d'erreur :
    Type de données incompatible dans l'expression du critère. (Erreur 3464)
    Est-ce qu'il n'est pas possible d'utiliser la fonction Rnd() sur des champs texte sous ACCESS ? Même une fois ce problème réglé, je pense que ma démarche n'est pas bonne puisque je pense que le résultat renvoyé sera 2 notes de 3 élèves sur la totalité de mes 50 écoles et ce, tous niveaux confondus, alors que je voudrais avoir 2 notes de 3 élèves par niveau et par école sur 50 écoles soit 2x3x3x50=900 notes d'élèves.

    Je ne suis pas sûr que ce je souhaite faire soit vraiment réalisable sous ACCESS, c'est pourquoi ma première question est de savoir si cela est possible sous ACCESS, si oui, est-ce réalisable uniquement en SQL ou dois-je (ou est-ce que c'est plus facile d')également utiliser du code VBA ? Ou est-ce que je ne peux faire tout ceci que sous EXCEL ?

    Si cela est réalisable sous ACCESS, quel pourrait-être le bon raisonnement et la bonne syntaxe, s'il-vous-plaît ? J'espère avoir été clair. N'hésitez surtout pas à me demander des précisions.

    Je vous remercie d'avance pour le temps que vous consacrerez à mon cas.

  2. #2
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour,
    en VBA c'est réalisable
    en SQL c'est faisable si la table écoles contient un champ NumeroEcole incrementé, cela donnerait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM [EcolesDVP.com]
    WHERE ((EcolesDVP.NumeroEcole)=CLng(Rnd(1)*50)) And (([EcolesDVP.com].[NiveauClasse]) IN ("CP","CE2","CM2"))

  3. #3
    Membre régulier Avatar de keketteboy
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2008
    Messages : 100
    Points : 73
    Points
    73
    Par défaut
    Bonjour helas,

    Tout d'abord merci. Malheureusement, ma table EcolesDVP.com ne contient pas de champ NumeroEcole incrémenté mais un NuméroEcole qui n'est pas un champ numérique.

    Je suppose que cela est donc irréalisable en SQL. Je dois donc le réaliser en VBA, je pense donc passer par des formulaires ou des états sous ACCESS. J'attends une confirmation de votre part pour déplacer mon post sur le forum VBA d'ACCESS ou VBA d'EXCEL. Merci infiniment encore une fois.

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 116
    Points : 5 242
    Points
    5 242
    Par défaut
    Bonjour,
    Citation Envoyé par keketteboy Voir le message
    Est-ce qu'il n'est pas possible d'utiliser la fonction Rnd() sur des champs texte sous ACCESS ?
    Apparemment non mais cela peut être fait sur n'importe quel autre champ numérique, ou même sur rnd(asc(left(monchamp,1)))

    Citation Envoyé par keketteboy Voir le message
    je voudrais avoir 2 notes de 3 élèves par niveau et par école sur 50 écoles soit 2x3x3x50=900 notes d'élèves.
    Je pense qu'il te faut une requête imbriquée du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select x.nomecole,
    (
    select top 3 note FROM [EcolesDVP.com] a where a.niveauclasse='CP' and a.nomecole=x.nomecole order by rnd(note)
    UNION
    select top 3 note FROM [EcolesDVP.com] b where b.niveauclasse='CE2' and b.nomecole=x.nomecole order by rnd(note)
    UNION
    select top 3 note FROM [EcolesDVP.com] c where c.niveauclasse='CM2' and b.nomecole=x.nomecole order by rnd(note)
    )
    FROM [EcolesDVP.com] x where x.nomecole in (select top 50 nomecole FROM [EcolesDVP.com] order by rnd(asc(left(nomecole,1)))
    Mais je ne vois pas bien ce que veut dire "2 notes de 3 élèves" ?

    Dans tous les cas ça sera plus lisible en VBA...

  5. #5
    Membre régulier Avatar de keketteboy
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2008
    Messages : 100
    Points : 73
    Points
    73
    Par défaut
    Bonjour,

    Merci nico84. Pour répondre à ta question
    Mais je ne vois pas bien ce que veut dire "2 notes de 3 élèves" ?
    j'ai juste voulu simplifier mon problème puisque évidemment, chaque élève n'a pas le même nombre de moyennes en fonction de son niveau. Pour une meilleure compréhension, j'avais donc limité le problème à 2 notes par élève. De toutes manières, je vais tester vos solutions et je vous tiens au courant. En tout cas, encore merci pour vos réponses à chacun.

  6. #6
    Membre régulier Avatar de keketteboy
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2008
    Messages : 100
    Points : 73
    Points
    73
    Par défaut
    Bonjour.

    Alors j'ai testé ta solution nico84 et ACCESS me met comme message
    Cette sous-requête peut retourner au plus un enregistrement. (Erreur 3354)
    donc apparemment cela n'est pas possible. Je ne vois pas du tout d'où viendrait le problème.

    Merci pour le temps que vous me consacrez.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/03/2007, 10h52
  2. Réponses: 3
    Dernier message: 21/01/2007, 11h40
  3. Réponses: 7
    Dernier message: 26/10/2006, 16h13
  4. [SQL Server] rechercher dans plusieurs champs d'une table
    Par houla! dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/08/2006, 10h37
  5. Réponses: 19
    Dernier message: 28/07/2006, 11h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo