ne garder que certains enregistrements (COUNT ?)

ne garder que certains enregistrements (COUNT ?) - SQL/NoSQL - Programmation

Marsh Posté le 23-02-2005 à 11:08:11    

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

Reply

Marsh Posté le 23-02-2005 à 11:08:11   

Reply

Marsh Posté le 23-02-2005 à 11:10:04    

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 -
Reply

Marsh Posté le 23-02-2005 à 11:18:04    

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.

Reply

Marsh Posté le 23-02-2005 à 11:20:18    

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 -
Reply

Marsh Posté le 23-02-2005 à 11:35:45    

Ca ne marche pas à cause du DISTINCT

Reply

Marsh Posté le 23-02-2005 à 11:46:18    

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 -
Reply

Marsh Posté le 23-02-2005 à 12:09:46    

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.

Reply

Marsh Posté le 23-02-2005 à 12:11:15    

...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 -
Reply

Marsh Posté le 23-02-2005 à 12:12:51    

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

Reply

Marsh Posté le 23-02-2005 à 12:13:27    

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 -
Reply

Marsh Posté le 23-02-2005 à 12:13:27   

Reply

Marsh Posté le 23-02-2005 à 12:21:39    

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...
 

Reply

Marsh Posté le 23-02-2005 à 12:32:55    

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 -
Reply

Marsh Posté le 23-02-2005 à 12:43:31    

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
Reply

Marsh Posté le 23-02-2005 à 19:08:24    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed