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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  ne garder que certains enregistrements (COUNT ?)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

ne garder que certains enregistrements (COUNT ?)

n°990937
manuhard
Le bois ne rend pas les coups
Posté le 23-02-2005 à 11:08:11  profilanswer
 

J'ai une requête, qui renvoit des enregistrements sous cette forme :
 
Champ 1 Champ2
1 53
1 54
2 100
3 110
 
J'aimerais ne ramener que ceux dont le Champ1
a plus d'une occurence, soit ici :
 
1 53
1 54
 
Comment faire cela ?
 
Merci d'avance !
 
manuhard

mood
Publicité
Posté le 23-02-2005 à 11:08:11  profilanswer
 

n°990940
skeye
Posté le 23-02-2005 à 11:10:04  profilanswer
 

Tu dois pouvoir t'en tirer sans problèmes avec un "exists"
http://www.techonthenet.com/sql/exists.htm
 
[edit]
 
Avec un "in" aussi, d'ailleurs...


Message édité par skeye le 23-02-2005 à 11:11:01

---------------
Can't buy what I want because it's free -
n°990952
manuhard
Le bois ne rend pas les coups
Posté le 23-02-2005 à 11:18:04  profilanswer
 

Voilà ma requête :
 
select DISTINCT(adhe_no_adher) adhe_no_adher, adhe_cod_cons, adhe_cod_agen
from adhesions
 
Elle retourne plus d'enregistrements que la suivante, parce qu'il y a ades adhe_cod_cons et des adhe_cod_agen différents
 
select DISTINCT(adhe_no_adher)
from adhesions
 
J'aimerai avoir le différentiel.

n°990954
skeye
Posté le 23-02-2005 à 11:20:18  profilanswer
 

On va pas te faire la requete, je t'ai filé un lien avec une explication du exists et des exemples, ça devrait te suffire à trouver!:o


Message édité par skeye le 23-02-2005 à 11:20:45

---------------
Can't buy what I want because it's free -
n°990966
manuhard
Le bois ne rend pas les coups
Posté le 23-02-2005 à 11:35:45  profilanswer
 

Ca ne marche pas à cause du DISTINCT

n°990983
skeye
Posté le 23-02-2005 à 11:46:18  profilanswer
 

manuhard a écrit :

Ca ne marche pas à cause du DISTINCT


:heink:
t'as pas besoin de distinct pour la requête que tu veux...montre ce que tu as fait.


---------------
Can't buy what I want because it's free -
n°991017
manuhard
Le bois ne rend pas les coups
Posté le 23-02-2005 à 12:09:46  profilanswer
 

Le DISTINCT ne marche pas parce que je fais un
 
SELECT DISTINCT(champ1), champ2
FROM ma_table
GROUP BY champ1, champ2
HAVING (count(champ1)>1)
 
Et que la requête ne fait pas le HAVING (count(champ1)>1) sur le nombre d'enregistrements ramenés par la requête, mais sur tous les enregistrements de la table.
 
Ex :
 
données de ma table :
 
Champ 1 Champ 2
1 50
1 50
1 51
2 100
2 100
 
Données ramenées par la requête :
 
Champ 1 Champ 2
1 50
1 51
2 100
2 100
 
Dans ce cas, je ne voudrais ramener que les enregistrements "1", pas les "2". Car la différence porte sur le Champ2.

n°991018
skeye
Posté le 23-02-2005 à 12:11:15  profilanswer
 

...donc tu t'en fous complètement de la solution que je t'ai proposée, si je comprends bien...[:itm]


---------------
Can't buy what I want because it's free -
n°991022
manuhard
Le bois ne rend pas les coups
Posté le 23-02-2005 à 12:12:51  profilanswer
 

Sorry je n'ai pas réussi avec ta solution :-(

n°991023
skeye
Posté le 23-02-2005 à 12:13:27  profilanswer
 

manuhard a écrit :

Sorry je n'ai pas réussi avec ta solution :-(


bah montre ce que tu as essayé...ce sera plus facile pour te corriger.


---------------
Can't buy what I want because it's free -
mood
Publicité
Posté le 23-02-2005 à 12:13:27  profilanswer
 

n°991036
manuhard
Le bois ne rend pas les coups
Posté le 23-02-2005 à 12:21:39  profilanswer
 

Voici ma requête avec EXISTS :
 
SELECT DISTINCT(adhe_no_adher)
FROM ADHESIONS T1
WHERE NOT EXISTS (SELECT DISTINCT(adhe_no_adher) adhe_no_adher, adhe_cod_cons, adhe_cod_agen
                  FROM ADHESIONS T2
                  WHERE T1.rowid = T2.rowid);
 
 
J'ai plus d'enregistrements dans la table T2, que dans la table T1.
 
Mon but est de faire le différentiel entre la table T1 :
SELECT DISTINCT(adhe_no_adher)
FROM ADHESIONS T1
 
et la table T2 :
SELECT DISTINCT(adhe_no_adher) adhe_no_adher, adhe_cod_cons, adhe_cod_agen FROM ADHESIONS T2
 
Sachant que la différence est sur les champs adhe_cod_cons et adhe_cod_agen, ce qui fait que j'ai des lignes en plus sur ma requête T2...
 

n°991047
skeye
Posté le 23-02-2005 à 12:32:55  profilanswer
 

manuhard a écrit :

Voici ma requête avec EXISTS :
 
SELECT DISTINCT(adhe_no_adher)
FROM ADHESIONS T1
WHERE NOT EXISTS (SELECT DISTINCT(adhe_no_adher) adhe_no_adher, adhe_cod_cons, adhe_cod_agen
                  FROM ADHESIONS T2
                  WHERE T1.rowid = T2.rowid);
 


 
A priori tu as mal compris le fonctionnement du exists, là...tu essaies de t'en servir comme d'un 'not in' (qui doit fonctionner, d'ailleurs, en modifiant très peu ta requête).
Si j'ai bien compris, tu cherches à avoir les adhe_no_adher des enregistrements tels qu'il existe un autre enregistrement ayant le même adhe_no_adher, mais ayant un rowid différent...Il suffit de traduire ça simplement par

Code :
  1. select adhe_no_adher
  2. from adhesions T1
  3. where exists(
  4. select null
  5. from adhesions T2
  6. where T1.adhe_no_adher = T2.adhe_no_adher
  7. and T1.rowid != T2.rowid)


 
C'est bien ce que tu cherches à avoir? Si oui, regarde bien la requête (en considérant que je n'ai aps fait d'erreurs...[:joce]), et tu verras que c'est une traduction très simple de ce que tu cherches...


Message édité par skeye le 23-02-2005 à 12:33:12

---------------
Can't buy what I want because it's free -
n°991058
manuhard
Le bois ne rend pas les coups
Posté le 23-02-2005 à 12:43:31  profilanswer
 

J'ai peut-être trouvé, grâce à votre aide :
 
Cette requête me permet, je pense, d'avoir le différentiel entre 2 requêtes :
 

Code :
  1. SELECT DISTINCT(adhe_no_adher), adhe_cod_cons, adhe_cod_agen
  2. FROM adhesions t1
  3. WHERE EXISTS
  4. (
  5. SELECT DISTINCT(ADHE_NO_ADHER) FROM adhesions t2
  6. WHERE t1.adhe_no_adher = t2.adhe_no_adher
  7. and ((t1.adhe_cod_cons <> t2.adhe_cod_cons) OR (t1.adhe_cod_agen <> t2.adhe_cod_agen))
  8. )


Message édité par manuhard le 23-02-2005 à 14:32:21
n°991710
Beegee
Posté le 23-02-2005 à 19:08:24  profilanswer
 

Une autre possibilité :
 

Code :
  1. SELECT Champ1, Champ2
  2. FROM Table
  3. WHERE Champ1 IN (SELECT Champ1, COUNT(*) FROM Table
  4.                  GROUP BY Champ1
  5.                  HAVING COUNT(*) > 1);


Message édité par Beegee le 23-02-2005 à 19:08:34

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

  ne garder que certains enregistrements (COUNT ?)

 

Sujets relatifs
garder la valeur d'une variable[résolu]une sum d un count
Requête avec COUNT ?Optimisation d'un count
Garder le résultat d'une requete en mémoire avec PHP Part 2 [Résolu]garder l'affichage du site suivant la résolution
Comment marche les forums et certains sites (comme hfr d'ailleurs)Garder couleurs d'un gif avec GetThumbnailImage() ,comment faire ?
Garder le résultat d'une requete en mémoire avec PHP[VB6] Nbre d'enregistrements dans un Recordset
Plus de sujets relatifs à : ne garder que certains enregistrements (COUNT ?)


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