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 !
Delphim
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 !
Delphim
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.
Salut,
tu peux faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT champ1, champ2 FROM ta_table GROUP BY champ1 HAVING (count(champ1)>1)
Bonjour,
rectification du code du Nantais qui est faux (manque le champ2 dans le group by)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 select champ1, champ2 from ta_table where champ1 in (select champ1 from ta_table GROUP BY champ1 HAVING (count(champ1)>1)
Ca ne marche pas parce que je fais un
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT champ1, champ2 FROM ta_table GROUP BY champ1 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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT DISTINCT(champ1), champ2 FROM ta_table GROUP BY champ1, champ2 HAVING (count(champ1)>1)
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.
Bonjour,
ceci devrait marcher :
select champ1, champ2
from ta_table
where champ1 in
(select champ1 from ta_table
GROUP BY champ1
HAVING (count(champ2)>1)
et :
tu sélectionnes les lignes de ta table pour lesquelles il existe au moins une autre ligne avec un champ1 identique
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT DISTINCT(champ1), champ2 FROM ta_table t1 WHERE EXISTS ( SELECT 1 FROM ta_table t2 WHERE t1.champ1 = t2.champ1 AND t1.rowid != t2.rowid)
edit : finalement, je suis pas certain d'avoir bien saisi la subtilité de la demande
Tu peux aussi faire :
Afin de ne garder qu'une ligne quand il y a plusieurs lignes pour un même champ1 (avantage : pas de jointure et pas de in, du bien bourrain quand même...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 select substr(x, 1, instr(x, ',')-1) champ1, substr(x, instr(x, ',')+1) champ2 from ( select min(champ1 || ',' || champ2) x from TEST group by champ1 having count(*) > 1 )
Laly.
Pour TheRussian :
que ce soit count(champ2) ou count(champ1), le résultat sera le même si les champs sont renseignés.
Il me semble que ma requête doit fonctionner sinon il faudrait m'expliquer ce qui est faux !
Ca ne marche pas :
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 :
et la table T2 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT DISTINCT(adhe_no_adher) FROM ADHESIONS T1
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...
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT DISTINCT(adhe_no_adher) adhe_no_adher, adhe_cod_cons, adhe_cod_agen FROM ADHESIONS T2
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SELECT DISTINCT(adhe_no_adher), adhe_cod_cons, adhe_cod_agen FROM adhesions t1 WHERE EXISTS ( SELECT DISTINCT(ADHE_NO_ADHER) FROM adhesions t2 WHERE t1.adhe_no_adher = t2.adhe_no_adher and ((t1.adhe_cod_cons <> t2.adhe_cod_cons) OR (t1.adhe_cod_agen <> t2.adhe_cod_agen)) )
Autant pour moi. Je viens de tester c'est exactement la même chose.Envoyé par lper
Je n'avais jamais fait comme ca.
Désolé.
delphim veut tu bien repréciser le contenu de la table, les différents résultats obtenus avec les requêtes proposées et finalement le résultat que tu veux et que représente ce résultat en français
PS : merci de penser au balise code, j'en ai marre d'éditer tes messages.
Cette requête :
Me permet d'avoir tous les enregistrements de ma requête sur l'adhésion t1, pour lesquels il existe des codes conseillers (adhe_cod_cons) ou des codes agents (adhe_cod_agen) différents pour un même numéro d'adhérent (adhe_no_adher)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT DISTINCT(adhe_no_adher), adhe_cod_cons, adhe_cod_agen FROM adhesions t1 WHERE EXISTS ( SELECT DISTINCT(ADHE_NO_ADHER) FROM adhesions t2 WHERE t1.adhe_no_adher = t2.adhe_no_adher and ((t1.adhe_cod_cons <> t2.adhe_cod_cons) OR (t1.adhe_cod_agen <> t2.adhe_cod_agen)) )
En clair sur un exemple :
adhe_no_adher adhe_cod_cons adhe_cod_agen
1 50 100
1 55 100
1 50 101
2 50 100
3 50 101
Ce qui m'intéresse, c'est les différences, pour un même adhérent, entre les champs adhe_cod_cons et adhe_cod_agen, ici je ne veux récupérer que les 3 premiers enregistrements.
Partager