Besoin d'aide Access

Résolu
Elmout -  
Christounet Messages postés 1272 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Comme le titre l'indique j'aurais besoin de conseils/aide pour savoir si ce que je veux faire est possible ou pas et si oui comment car je n'y arrive pas tout seul.

J'ai donc une table Population(ID_PAYS,YEAR,SOURCE,POPULATION), avec cette dernière j'aimerais pouvoir récupérer la valeur max pour POPULATION sachant qu'il peut y avoir plusieurs lignes étant donné la structure de ma table (ID_PAYS,YEAR et SOURCE clé primaire)

Voilà ça parait tout bète mais je n'y arrive pas ... serais-je obligé de passer par du VBA pour arriver à mes fins ? ou une super requête SQL que je n'arrive pas à batir me suffira ?

Merci beaucoup pour votre aide.

Cordialement,

4 réponses

  1. Christounet Messages postés 1272 Date d'inscription   Statut Membre Dernière intervention   1 393
     
    Bonjour,

    Si tu veux seulement savoir la valeur maximale de la colonne Population, le code est
    SELECT MAX(popupation) from nomdetatable


    A plus
    0
    1. Elmout
       
      Effectivement ça marche mais dans ce cas je complique :p. Il faudrait que je puisse "choisir" de prendre pas forcément le max mais en priorité tel source et si celle là n'existe pas pas prendre le max des autres.
      0
  2. Christounet Messages postés 1272 Date d'inscription   Statut Membre Dernière intervention   1 393
     
    Bonjour,

    Le code devrait être le suivant
    SELECT MAX(population) from nomdetatable
    WHERE source = sourcepreferée
    UNION
    SELECT MAX(population) from nomdetatable
    WHERE source <> sourcepreferée


    Cette requête devrait te retourner soit un enregistrement, soit deux enregistrements
    Si ta source préférée existe, le premier enregistrement contiendra son maximum et le deuxième le maximum des autres source, si ta source préférée n'existe pas, le premier et seul enregistrement contiendra le maximum des autres sources.

    A plus
    0
    1. Elmout
       
      Bonjour,

      Ce code fait bien ce que tu dis mais le soucis que je vais avoir c'est d'exploter cette requête ou plutôt les résultats de cette requêtes dans un Etat Access ... En fouillant dans ma mémoire de cours de SQL il me semble que je pourrais obtenir ce que je voudrais en faisant des jointures entre plusieurs requêtes.

      SELECT * FROM Population AS NSO WHERE SOURCE="NSO"
      SELECT * FROM Population AS IFS WHERE SOURCE="IFS"
      SELECT * FROM Population AS CHELEM WHERE SOURCE="CHELEM"

      avec ça je récupère 3 tables avec ID_PAYS,YEAR,SOURCE,POPULATION et c'est donc après que je bloque.je voudrais obtenir une table de la forme (ID_PAYS,YEAR,NSO.POPULATION,IFS.POPULATION,CHELEM.POPULATION et bien entendu sans doublons au niveau des ID_PAYS ou YEAR .... malheureusement je n'arrive pas à obtenir cette table qui me permettrait d'exploiter cette requête dans Etat Access

      Merci pour tes réponses et j'espère ta future réponse ;)
      0
  3. Christounet Messages postés 1272 Date d'inscription   Statut Membre Dernière intervention   1 393
     
    Bonjour,

    Avec Access, j'ai crée une requête d'analyse croisée dont voici le code
    TRANSFORM Max(Population.POPULATION) AS MaxOfPOPULATION
    SELECT Population.ID_PAYS, Population.YEAR
    FROM Population
    GROUP BY Population.ID_PAYS, Population.YEAR
    PIVOT Population.SOURCE;

    Tu trouveras ici le résultat. Regardes si cela correspond a ce que tu recherches.

    A plus
    0
    1. Elmout
       
      Bonjour,

      Cette requête est la bonne !!! Par contre je ne la comprends pas vraiment à vrai dire :s ..... Tu pourrais me l'expliquer ? car j'ai jamais vu TRANSFORM ni PIVOT .... merci beaucoup en tout cas pour m'avoir débloqué !

      A plus
      0
      1. Elmout > Elmout
         
        J'ai crié victoire trop vite :s .... en effet Access ne veut pas utilise cette requête pour un Etat j'ai le message suivant: "impossible d'utiliser comme sous requête l'analyse croisée d'une colonne fixe" Tu pourrais m'aider là aussi ? (je peux pas enlever le "résolu" alors ....

        Encore merci
        0
  4. Christounet Messages postés 1272 Date d'inscription   Statut Membre Dernière intervention   1 393
     
    Bonjour,

    J'ai écrit une nouvelle requête qui devrait donner ce que tu recherche
    select matable.id_pays , matable.year , sum(Matable.CHELEM)  as Chelem ,
    sum(Matable.IFS) as Ifs , sum(Matable.NSO) as Nso
    from
    (select id_pays , year , 
    iif(source='CHELEM' , totalpopulation , 0) as CHELEM ,
    iif(source='IFS' , totalpopulation , 0) as IFS ,
    iif(source='NSO' , totalpopulation , 0) as NSO
    from
    (select id_pays , year , source , max(Population) as TotalPopulation from Population
    group by id_pays , year , source)) as Matable
    group by matable.id_pays , matable.year;

    Tu sauves cette requête et tu lui donnes un nom, ensuite tu peux utiliser cette requête dans un état.
    En espérant que cela fasse ce que tu veux.
    A plus
    0
    1. Elmout
       
      Bonjour,

      T'as 1ère solution était bonne en fait il suffisait de rajouter 'in (NSO,IFS,CHELEM)' à la fin de la requête et j'avais plus de problème. Merci beaucoup en tout cas pour ton aide maintenant je suis débloqué et j'avance à grand pas dans mon projet !

      Encore merci et à plus !
      0
      1. Christounet Messages postés 1272 Date d'inscription   Statut Membre Dernière intervention   1 393 > Elmout
         
        Salut Elmout,

        Content de savoir que ton problème est résolu.

        A plus
        0