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

Langage SQL Discussion :

[ACCESS] Je bloque sur une requête...


Sujet :

Langage SQL

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut [ACCESS] Je bloque sur une requête...
    Bonjour, voila mon problème.

    J'ai une table ACHAT_CLIENT.
    Je veux récupérer une liste : N° client - Année des achats

    Exemple :

    Client A1 a fait des achats en 2000 et 2001
    Client A2 a fait des achats en 2002
    Client A3 a fait des achats en 2003

    J'aimerai avoir un résultat comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    A1   2000
    A1   2001
    A1   2002
    A1   2003
    A2   2000
    A2   2001
    A2   2002
    A2   2003
    A3   2000
    A3   2001
    A3   2002
    A3   2003
    et pas comme ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    A1   2000
    A1   2001
    A2   2002
    A3   2003
    Merci d'avance

    PS : J'utilise ACCESS

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 99
    Points : 110
    Points
    110
    Par défaut
    Bonjour,

    Si j'ai bien compris, tu veux obtenir la liste de tous les clients avec, pour chacun, la liste de toutes les années où il y a eu un achat (tout client confondu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select 
           distinct a.num_client
           , b.annee
    from
           ma_table a
           ,ma_table b
    Ceci doit répondre à ta question mais comme il n'y a pas de jointures entre les deux tables, tu as un produit cartésien!!!! ce qui n'ai franchement pas bon...

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Merci mais une seule table est concernée.

    Dans la Table des achats se trouve ID_ACHAT (UNIQUE) - ID_CLIENT - DATE_ACHAT

    Donc il me faut comme résultat
    la liste de tous les clients ( ID_CLIENT) qui se trouvent dans la table des achats multiplié par le nombre d'années différentes ( YEAR(DATE_ACHAT) )

    Donc disont que la table des achats comporte l'historique des 5 dernières années et qu'il y a en tout 5 clients différents dans cette historique.
    Mon résultat sera :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    CLIENT 1   2001
    CLIENT 2   2001
    CLIENT 3   2001
    CLIENT 4   2001
    CLIENT 5   2001
     
    CLIENT 1   2002
    CLIENT 2   2002
    CLIENT 3   2002
    CLIENT 4   2002
    CLIENT 5   2002
     
    CLIENT 1   2003
    CLIENT 2   2003
    CLIENT 3   2003
    CLIENT 4   2003
    CLIENT 5   2003
     
    CLIENT 1   2004
    CLIENT 2   2004
    CLIENT 3   2004
    CLIENT 4   2004
    CLIENT 5   2004
     
    CLIENT 1   2005
    CLIENT 2   2005
    CLIENT 3   2005
    CLIENT 4   2005
    CLIENT 5   2005
    Sachant que le 2ème champ ne m'est pas utile. Il me faut juste la liste des clients dans cette ordre seulement.

    Tout ceci me servira pour l'établissement d'un report

    Merci

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 35
    Points : 36
    Points
    36
    Par défaut
    Bonjour,

    C'est peut-être une énorme connerie mais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT UNIQUE a1.id_client, a2.date_achat
    FROM achat a1, achat a2
    Je pense que ça devrait répondre à ta question... Ce n'est certainement pas optimisé du tout, mais si c'est ce que tu veux...

  5. #5
    Membre expérimenté
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Points : 1 392
    Points
    1 392
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T_Achat.CLient, T_Achat.Date_achat, Sum(T_Achat.total) AS SommeDetotal
    FROM T_Achat
    GROUP BY T_Achat.CLient, T_Achat.Date_achat
    ORDER BY T_Achat.CLient, T_Achat.Date_achat;

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Merci à vous mais je n'ai apparemment pas très bien expliqué mon problème.

    Donc, ma table de départ est comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CLIENT 1     11-02-2003
    CLIENT 4     19-06-2001
    CLIENT 3     01-01-2002
    CLIENT 4     03-10-2001
    CLIENT 5     15-07-2005
    CLIENT 4     21-12-2003
    CLIENT 5     30-06-2005
    CLIENT 2     14-08-2001
    CLIENT 4     03-07-2002
    CLIENT 3     03-09-2003
    Donc :
    - CLIENT 1 a effectué des achats en 2003
    - CLIENT 2 a effectué des achats en 2001
    - CLIENT 3 a effectué des achats en 2002 - 2003
    - CLIENT 4 a effectué des achats en 2001 - 2003 - 2002
    - CLIENT 5 a effectué des achats en 2005

    5 CLIENT différents dans une période de 5 années

    Mon résultat est donc

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    CLIENT 1   2001 
    CLIENT 2   2001 
    CLIENT 3   2001 
    CLIENT 4   2001 
    CLIENT 5   2001 
     
    CLIENT 1   2002 
    CLIENT 2   2002 
    CLIENT 3   2002 
    CLIENT 4   2002 
    CLIENT 5   2002 
     
    CLIENT 1   2003 
    CLIENT 2   2003 
    CLIENT 3   2003 
    CLIENT 4   2003 
    CLIENT 5   2003 
     
    CLIENT 1   2004 
    CLIENT 2   2004 
    CLIENT 3   2004 
    CLIENT 4   2004 
    CLIENT 5   2004 
     
    CLIENT 1   2005 
    CLIENT 2   2005 
    CLIENT 3   2005 
    CLIENT 4   2005 
    CLIENT 5   2005
    C'est tordu hein !

    J'espère que cela est possible

    Merci

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 99
    Points : 110
    Points
    110
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Select distinct
            a.client
            , year(b.date)
    from 
            ma_table a
            , ma_table b
    order by
            year(b.date)
    Cette requête doit te retourner le bon résultat.

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Merci , ca à l'air de marcher.

    Mais ca prend beaucoup de temps sur une petite table de 1000 records.
    La moyenne en nombre d'enregistrement dans cette est de +- 30.000 records (C'est la memerde).

    Y a t'il une autre solution qui retourne le même résultat en plus rapide

    Merci encore.

  9. #9
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    J'ai :trouve:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT DISTINCT M1.MVT_CLIENT, M2.ANNEE
    FROM (SELECT MVT_CLIENT
                FROM D_MVT
                GROUP BY MVT_CLIENT)As M1,
     
               (SELECT YEAR(MVT_DATE) As ANNEE
                FROM D_MVT
                GROUP BY YEAR(MVT_DATE))As M2
    ORDER BY 2;
    Je suis étonné que les SELECT dans la clause FROM marche sous Access.

    Enfin, le plus important est que cela marche et pratiquement instantané sur une table de test avec +- 60.000 records.

    Merci pour à vous tous pour l'inspiration.

    A+

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

Discussions similaires

  1. Bloqué sur une requête DELETE
    Par _Eric_ dans le forum JDBC
    Réponses: 4
    Dernier message: 29/01/2013, 09h47
  2. [MySQL] texte qui bloque sur une requéte mysql
    Par leto02 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 28/11/2007, 11h32
  3. erreur 00905 sur une requête provenant d'access
    Par amamildor dans le forum SQL
    Réponses: 4
    Dernier message: 09/10/2007, 14h05
  4. [Access] Fonction TOP dans une requête sur deux tables
    Par pc75 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 04/07/2007, 09h31
  5. [Access] Manque d'idées sur une requête
    Par portu dans le forum Langage SQL
    Réponses: 12
    Dernier message: 22/11/2004, 12h25

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