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 :

Sous-requête contenant Avg [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Sous-requête contenant Avg
    Bonjour,

    je suis donc débutante en Access et là, je suis face à un mur ^^

    Je voudrais faire une sous-requête dans un UPDATE contenant une fonction Avg d'un champ déjà rempli d'une de mes tables. Ma sous-requête a un alias. J'ai donc:
    1) la sous-requête:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Avg(georges) AS GEORGES From Table2;

    2) la requête:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE Table2 INNER JOIN Table1 ON Table1.[N°Table1]=Table2.[N°Table1] SET bob = GEORGES;

    Lorsque j'execute ma requête, Access me demande de lui donner un paramètre pour GEORGES.
    J'ai essayé pas mal de choses; notamment mettre Avg dans la requête UPDATE, ou entre décomposer en 2 sous-requête (une pour sélectionner mon champ, une autre pour Avg). Et rien ne fonctionne!

    Est-ce que quelqu'un aurait la solution? ou une piste? une idée? N'importe quoi en fait!!!
    Merci par avance!

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 095
    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 095
    Points : 5 211
    Points
    5 211
    Par défaut
    Bonsoir,

    C'est pas très clair... Quel est le nom de la sous-requête ? Quel est le type du champ Georges ?

    Amha
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    avg(georges) as georges
    ça ne peut pas marcher, il faudrait sinon SQL ne sait pas si georges est sa moyenne ou lui-même
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Alors, tous les champs cités sont des réels doubles.

    Effectivement, si jamais je fais un alias ayant le même nom qu'un de mes champs, je me retrouve avec une copie de ce champ.
    Si je fais un alias type Marcel, lorsque j'exécute ma requête, Access ouvre une fenêtre pour demander la valeur du paramètre Marcel.

    En fait, je cherche à mettre à jour une colonne d'une table avec la moyenne d'une colonne d'une autre table.

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 095
    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 095
    Points : 5 211
    Points
    5 211
    Par défaut
    Il faudrait en dire plus parce qu'avec ce qui est écrit ça ne me semble pas cohérent. A quoi sert la sous-requête et quand est-elle appelée par la 2e requête ?

    Avec une sous-requete ça peut ressembler à ça :
    sous-requête toto :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select nom, avg(valeur) as moyenne from t1 group by nom
    Puis la requête mise à jour doit appeler toto et non t1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update t2 inner join toto on t2.nom=toto.nom set t2.note=toto.moyenne
    En une seule requête ceci marche peut-être aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update t2 set note=(select avg(valeur) from t1 where t1.nom=t2.nom)
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  5. #5
    Candidat au Club
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Déjà merci de tes réponses
    Alors je vais donc donner plus de détails...Mes (vraies) tables (simplifiées)

    Table : Echantillon
    Num_Echantillon : numéroauto (clé primaire)
    Code_Station : texte (clé étrangère)
    Type: texte
    U238 : réel double

    Station
    Code_Station: texte clé primaire
    Code_Station_Temoin: texte
    Eau_U238 : réel double

    J'ai donc une relation un-à-plusieurs entre Station et Echantillon.
    Et donc mon but dans la vie () est de ranger une moyenne de l'ensemble des champs U238 pour lesquels Station.Code_Station=Echantillon.Code_Station et Echantillon.Type = Eau dans le champ Station.Eau_U238.

    Pour ce que tu m'as déjà donné, la dernière requête SQL ne fonctionne pas (enfin chez moi) et la requête + sous-requête, Access me donne "L'opération doit utiliser une requête qui peut être mise à jour". (La sous-requête seule me donne bien le résultat escompté).

    Voilà, j'espère que ces précisions t'éclaireront un peu plus sur mon problème. Et encore merci de prendre de ton temps pour m'aider.

  6. #6
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 095
    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 095
    Points : 5 211
    Points
    5 211
    Par défaut
    Bonjour,

    J'ai déjà remarqué qu'access met une mauvaise volonté particulière à accepter mes requêtes update

    Pour contourner ce problème j'avais utilisé une fonction publique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Function MaMoyenne(s as string)
    Dim rst As Recordset
    MaMoyenne = 0
    Set rst = CurrentDb.OpenRecordset("SELECT avg(u238) as X FROM echantillon WHERE type='Eau' and code_station = '" & s & "';")
    If Not rst.EOF Then If rst!X<> 0 Then MaMoyenne = rst!X
    rst.Close
    End Function
    C'est un peu lourd mais alors l'update est tout simple et en plus les stations qui n'ont pas de stat récupèrent la moyenne 0 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update station set eau_u238=MaMoyenne(code_station)
    C'est pas un soft radioactif au moins
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  7. #7
    Candidat au Club
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Woah! Merci beaucoup! Cela fonctionne superbement!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Optimisation d'une requête contenant des sous-requêtes
    Par Christophe Charron dans le forum Requêtes
    Réponses: 2
    Dernier message: 28/06/2010, 15h34
  2. AVG, sous-requête et LIMIT
    Par macmillan dans le forum Requêtes
    Réponses: 5
    Dernier message: 26/10/2006, 01h01
  3. Requêtes et sous requêtes
    Par lau2nyce dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/03/2004, 15h14
  4. suppression avec sous requête conditionnelle
    Par melmel dans le forum Requêtes
    Réponses: 8
    Dernier message: 18/03/2004, 23h20
  5. Réponses: 3
    Dernier message: 18/05/2003, 00h16

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