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

VBA Access Discussion :

sous requête avec UNION [AC-97]


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2009
    Messages : 24
    Points : 28
    Points
    28
    Par défaut sous requête avec UNION
    Bonjour.
    J'ai tenté d'effectuer une belle requête qui échouait. Bin quoi? Ça peut arriver à tout le monde !

    J'ai donc découpé ma requête en sous requêtes qui créaient des tables temporaires. Voici en gros le code. des sous requêtes. (Elle s'effectuent avec succès.)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    sql = ""
    sql = sql & "SELECT "
    sql = sql & "fdbase.champ1 AS 'Funds',"
    sql = sql & "SUM(podmst.champ2*iftchg.champ3) AS 'MV',"
    sql = sql & "pohmst.champ4 AS 'PortfDate' "
    sql = sql & "INTO #soustable1 "
    sql = sql & "FROM "
    sql = sql & "podmst, pohmst, fdbase, iftchg "
    sql = sql & "WHERE "
    sql = sql & "(blah=blah') AND "
    ...
    sql = sql & "(blah = (SELECT MAX(blah) FROM iftchg)) AND "
    sql = sql & "(blah = blah) "
    sql = sql & "GROUP BY(fdbase.champ1), (pohmst.champ4) "
    sql = sql & "ORDER BY(fdbase.champ1)"
    con.Execute sql
    La seconde sous requête fonctionne tout aussi bien. elle est très semblables ET le nom des sous champs sont les mêmes que la première soustable1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    sql = ""
    sql = sql & "SELECT "
    sql = sql & "fdbase.champ1 'Funds',"
    sql = sql & "SUM(podmst.champ2) AS 'MV',"
    sql = sql & "pohmst.champ4 AS 'PortfDate' "
    sql = sql & "INTO #soustable2 "
    sql = sql & "FROM "
    sql = sql & "podmst,pohmst,fdbase "
    sql = sql & "WHERE "
    ...
    con.Execute sql
    Donc, ces deux sous-tables sont créées et contiennent les données désirées et les mêmes noms de champs, le même format bien entendu.

    Je veux faire une union. Ca aussi ca marche.

    (SELECT * FROM #soustable1
    UNION
    SELECT * FROM #soustable2)
    Toutefois, ce que je veux faire, c'est :
    Lorsuqe le champ1 (Funds) est le même, fusionner les enregistrements en sommant le deuxième champ (MV) comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT merged.Funds, Sum(merged.MV), merged.PortfDate
    FROM
    (SELECT * FROM #soustable1
    UNION
    SELECT * FROM #soustable2) As merged 
    WHERE merged.Funds IN (UnelistedeFundsQuiExiste)
    GROUP BY merged.Funds, merged.PortfDate
    j'ai tenté de remplacer la première ligne par SELECT *.
    même problème, lorsque je passe par vba je recois une error odbc, si je passe directement par une requête dans la base de données Access m'indique que j'ai une syntaxe invalide dans mon FROM (comme si l'union était invalide, mais pourtant l'union isolée fonctionne parfaitement).

    Quelqu'un peut m'aider?

    Merci beaucoup

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 620
    Points : 56 862
    Points
    56 862
    Billets dans le blog
    40
    Par défaut
    bonjour,

    j'ai testé cette syntaxe sur un exemple similaire qui me semblait valide. Et elle fonctionne

    et puis , j'ai rajouté le symbole 'dièse' (#) devant le nom de ma table :
    ==>erreur de syntaxe dans la clause FROM.

    ==>essayer en mettant le nom de la table entre crochets []:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT merged.Funds, Sum(merged.MV), merged.PortfDate
    FROM
    (SELECT * FROM [#soustable1]
    UNION
    SELECT * FROM [#soustable2]) As merged 
    WHERE merged.Funds IN (UnelistedeFundsQuiExiste)
    GROUP BY merged.Funds, merged.PortfDate

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2009
    Messages : 24
    Points : 28
    Points
    28
    Par défaut
    Bonjour f-leb

    Merci pour ta réponse. Malheureusement, ça ne fonctionne toujours pas.
    J'ai décidé de contourner le problème en ne faisant que l'union, puis en modifiant les résultats avec du vba.

    moi aussi, la syntaxe me semble parfaitement correcte... Peut-être en rapport avec access 97 et les tables temporaires (#) ?

    Je ne sais pas.
    Merci encore d'avoir mis du temps pour ça.

    Problème contourné.

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

Discussions similaires

  1. Sous requête avec plusieurs retours
    Par grunk dans le forum Langage SQL
    Réponses: 7
    Dernier message: 22/10/2007, 13h57
  2. Sous-requêtes avec IN et NOT IN
    Par angebe dans le forum SQL
    Réponses: 6
    Dernier message: 28/09/2007, 11h59
  3. sous requête avec liste
    Par illegalsene dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/05/2007, 12h11
  4. Requête et sous requête avec SELECT et UPDATE
    Par Véronique75ca dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 29/06/2006, 21h25
  5. Problème requête avec UNION et ORDER BY
    Par Yann21 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 12/12/2003, 11h02

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