Besoin d'aide Access

Résolu
Elmout -  
Christounet Messages postés 1264 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

Christounet Messages postés 1264 Date d'inscription   Statut Membre Dernière intervention   1 392
 
Bonjour,

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


A plus
0
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
Christounet Messages postés 1264 Date d'inscription   Statut Membre Dernière intervention   1 392
 
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
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
Christounet Messages postés 1264 Date d'inscription   Statut Membre Dernière intervention   1 392
 
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
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
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
Christounet Messages postés 1264 Date d'inscription   Statut Membre Dernière intervention   1 392
 
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
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
Christounet Messages postés 1264 Date d'inscription   Statut Membre Dernière intervention   1 392 > Elmout
 
Salut Elmout,

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

A plus
0