Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1137 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [access] limiter les resultats retournés dans un group by - Résolu !

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[access] limiter les resultats retournés dans un group by - Résolu !

n°1458936
crashman
Posté le 17-10-2006 à 16:57:44  profilanswer
 

bonjour,  
j'ai une table matable :
 
id    flag  ordre
-------------
titi   0    1
titi   1    2  
titi   0    3
titi   1    4
titi   0    10
titi   1    25
titi   0    40
titi   1    42
toto 1    1
toto 1    2  
toto 0    3
toto 1    5
toto 1    15
toto 1    25
toto 0    40
toto 1    42
 
je voudrais une creer une requete en SQL access qui me permette de selectionner pour chaque id les 4 premiers enregistrement trié par ordre et qui  me compte parmi ces 4 enregistrements le nombre de flag à vrai et me  
 retourner le resultat suivant :  
 
id     nbflag      
------------
titi    2
toto  3
 
Merci bcp ! :jap:


Message édité par crashman le 19-10-2006 à 15:45:04
mood
Publicité
Posté le 17-10-2006 à 16:57:44  profilanswer
 

n°1460501
ZeBix
edit > preview
Posté le 19-10-2006 à 14:03:13  profilanswer
 

Bonjour
 
voici une solution un peu cochonne car elle n'est pas très paramétrable, et exige que ton champ "ordre" soit le même pour "titi" et "toto"
(pas question pour que cette solution fonctionne, que tu aies titi ordre 1 2 3 4 et toto ordre 5 6 7 8 par exemple...
 
1. Tu crées une query "Ma_query" avec cet ordre SQL :  
SELECT TOP 8 id, flag
FROM matable
ORDER BY matable.ordre;

 
2. Tu crées une autre requête qui a cet ordre SQL :  
SELECT id, count(1) AS nbflag
FROM Ma_query
WHERE flag=1
GROUP BY id;

 
(Pas envie de relancer l'éternel débat sur count(champ) donc tu mets ce que tu veux à la place du (1), ou tu le laisses, c'est pareil :) )
 
Output de la deuxième requête :
id - nbflag
titi - 2
toto - 3
 
Voilà ce n'est pas clean mais ça marche ...  
 
Sinon j'irais voir du côté des ruptures avec des macros, tu dois pouvoir bricoler ça en Access.
 
 
 

n°1460661
crashman
Posté le 19-10-2006 à 15:44:22  profilanswer
 

merci zebix,  
mais comme tu l'as dis cela exige que titi et toto aient un ordre bien defini (mon ordre etant en réalité une date...), j'ai eu une autre reponse d'un collegue assez ingeneuse :recreer un ordre 'virtuel'
 
SELECT rs.id, Sum(rs.flag) AS SommeDeflag
FROM [SELECT table1.id, table1.flag, table1.ordre, (select count(table2.id) from table1 table2 where table2.id = table1.id and table2.ordre >= table1.ordre) AS nombre
FROM table1
ORDER BY table1.ordre desc
         ]. AS rs
WHERE (((rs.nombre)<=4))
GROUP BY rs.id;
 
 
@+


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [access] limiter les resultats retournés dans un group by - Résolu !

 

Sujets relatifs
[resolu] Créer base de données sur hebergement.comGalerie Photo -> access denied pour une photo
[Access] Méthode hébergement Server.mdb et client utilisateur final[Résolu][Script aculo us] Sortable.create
[resolu] problème de regexune erreur en C que je n'arrive pas à résoudre !
Eliminer les doublons d'une table Access[Résolu] Probleme avec un insertHTML sur WYSIWYG
for-each imbriqués[resolu]Un problème simple[résolu]
Plus de sujets relatifs à : [access] limiter les resultats retournés dans un group by - Résolu !


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR