Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Requete pour supprimer doublon

8 réponses
Avatar
jc
Bonjour,

J'ai une table pr=E9sent=E9 comme suit (en version simplifi=E9e)
n'Credit Montant
19400 562,00
19500 452,00
19400 0.00
19600 0.00

Je souhaiterai (par le biais d'une requ=EAte access) supprimer le
doublon dont la valeur est nulle, et non toutes les valeurs nulles
(conserver dans mon exemple le cr=E9dit 19600)

merci pour votre aide

8 réponses

Avatar
3stone
Salut,

jc wrote:
J'ai une table présenté comme suit (en version simplifiée)
n'Credit Montant
19400 562,00
19500 452,00
19400 0.00
19600 0.00

Je souhaiterai (par le biais d'une requête access) supprimer le
doublon dont la valeur est nulle, et non toutes les valeurs nulles
(conserver dans mon exemple le crédit 19600)



"Supprimer le doublon" n'est pas trivial, comme on pourrait le croire...

En fait, il est simple de supprimer *les doublons* donc tous les
enregistrements lors de doublons. Mais, en garder l'un d'eux...

La méthode est la suivante...

Créer une requête de sélection du style :
Select C1, C2, Last(C3), Last(C4)
From LaTable
Group By C1, C2

C1 et C2 représente les champs à distinguer...
Lorsque le résultat est bon, transformer cette requête en
requête de création de table.

Dans cette table (sans doublons) créer un index composé
des champs à distinguer (ici le champ C1 et C2)
Voir ceci :
http://www.3stone.be/access/articles.php?lng=fr&pg21

Soit, on utilise dès maintenant cette nouvelle table
(en remplacement de l'ancienne contenant les doublons),
soit on utilise cette table pour éliminer les doublons
de la première table à problèmes.

Pour cela, une requête du style :

Delete * From Table1 Where Table1.ID Not In (
Select Table2.ID From Table2)


En fait, dans le cas de la seconde méthode, il suffit de sauver
l'identifiant dans la seconde table. La requête de suppression
supprimera tous les enregistrements de la première table qui
ne sont pas défini dans la seconde table.

Comme dit, ce n'est pas trivial et à tester sur une copie
de la table...

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
Michel__D
Bonjour,

jc a écrit :
Bonjour,

J'ai une table présenté comme suit (en version simplifiée)
n'Credit Montant
19400 562,00
19500 452,00
19400 0.00
19600 0.00

Je souhaiterai (par le biais d'une requête access) supprimer le
doublon dont la valeur est nulle, et non toutes les valeurs nulles
(conserver dans mon exemple le crédit 19600)

merci pour votre aide



En fait il faudrait savoir si c'est seulement le doublon (valeur nulle)
ou le cas échéant les doublons de valeur nulle.

Exemple :
n'Credit Montant
19400 562,00
19500 452,00
19400 0.00
19600 0.00
19400 0.00

Faut-il supprimer un seul "19400 0.00" ou les deux ?
Avatar
jc
On 6 août, 19:29, Michel__D
wrote:
Bonjour,

jc a écrit :

> Bonjour,

> J'ai une table présenté comme suit (en version simplifiée)
> n'Credit   Montant
> 19400     562,00
> 19500     452,00
> 19400     0.00
> 19600     0.00

> Je souhaiterai (par le biais d'une requête access) supprimer le
> doublon dont la valeur est nulle, et non toutes les valeurs nulles
> (conserver dans mon exemple le crédit 19600)

> merci pour votre aide

En fait il faudrait savoir si c'est seulement le doublon (valeur nulle)
  ou le cas échéant les doublons de valeur nulle.

Exemple :
n'Credit   Montant
19400     562,00
19500     452,00
19400     0.00
19600     0.00
19400     0.00

Faut-il supprimer un seul "19400     0.00" ou les deux ?



Je souhaiterai conserver pour le crédit 19400 la valeur 562 et donc
supprimer la valeur nulle pour le 19400 et conserver la valeur nulle
pour le crédit 19600. Pour résumé je souhaite supprimer les doublons
sur les crédit dont le montant est égal à 0

merci pour votre aide
Avatar
Michel__D
Bonjour,

jc a écrit :
On 6 août, 19:29, Michel__D
wrote:
Bonjour,

jc a écrit :

Bonjour,
J'ai une table présenté comme suit (en version simplifiée)
n'Credit Montant
19400 562,00
19500 452,00
19400 0.00
19600 0.00
Je souhaiterai (par le biais d'une requête access) supprimer le
doublon dont la valeur est nulle, et non toutes les valeurs nulles
(conserver dans mon exemple le crédit 19600)
merci pour votre aide


En fait il faudrait savoir si c'est seulement le doublon (valeur nulle)
ou le cas échéant les doublons de valeur nulle.

Exemple :
n'Credit Montant
19400 562,00
19500 452,00
19400 0.00
19600 0.00
19400 0.00

Faut-il supprimer un seul "19400 0.00" ou les deux ?



Je souhaiterai conserver pour le crédit 19400 la valeur 562 et donc
supprimer la valeur nulle pour le 19400 et conserver la valeur nulle
pour le crédit 19600. Pour résumé je souhaite supprimer les doublons
sur les crédit dont le montant est égal à 0

merci pour votre aide




Tu filtre les [n'Credit] qui ont plus d'un enregistrement :

SELECT [n'Credit] FROM LaTable GROUP BY [n'Credit] HAVING Count(Montant)>1;

Et tu supprime les enregistrements dont le [n'Credit] apparaît dans la requête
ci-dessus et dont le [Montant] est égal à zéro.

DELETE T.*
FROM LaTable AS T
WHERE T.[n'Credit] IN (SELECT [n'Credit] FROM LaTable GROUP BY [n'Credit] HAVING Count(Montant)>1)
And Nz(T.[Montant],0)=0;

PS:A utiliser avec les précautions d'usage lorsqu'on supprime.
Avatar
jc
On 7 août, 14:45, Michel__D
wrote:
Bonjour,

jc a écrit :



> On 6 août, 19:29, Michel__D
> wrote:
>> Bonjour,

>> jc a écrit :

>>> Bonjour,
>>> J'ai une table présenté comme suit (en version simplifiée)
>>> n'Credit   Montant
>>> 19400     562,00
>>> 19500     452,00
>>> 19400     0.00
>>> 19600     0.00
>>> Je souhaiterai (par le biais d'une requête access) supprimer le
>>> doublon dont la valeur est nulle, et non toutes les valeurs nulles
>>> (conserver dans mon exemple le crédit 19600)
>>> merci pour votre aide
>> En fait il faudrait savoir si c'est seulement le doublon (valeur nulle )
>>   ou le cas échéant les doublons de valeur nulle.

>> Exemple :
>> n'Credit   Montant
>> 19400     562,00
>> 19500     452,00
>> 19400     0.00
>> 19600     0.00
>> 19400     0.00

>> Faut-il supprimer un seul "19400     0.00" ou les deux ?

> Je souhaiterai conserver pour le crédit 19400 la valeur 562 et donc
> supprimer la valeur nulle pour le 19400 et conserver la valeur nulle
> pour le crédit 19600. Pour résumé je souhaite supprimer les doubl ons
> sur les crédit dont le montant est égal à 0

> merci pour votre aide

Tu filtre les [n'Credit] qui ont plus d'un enregistrement :

SELECT [n'Credit] FROM LaTable GROUP BY [n'Credit] HAVING Count(Montant)> 1;

Et tu supprime les enregistrements dont le [n'Credit] apparaît dans la requête
  ci-dessus et dont le [Montant] est égal à zéro.

DELETE T.*
FROM LaTable AS T
WHERE T.[n'Credit] IN (SELECT [n'Credit] FROM LaTable GROUP BY [n'Credit] HAVING Count(Montant)>1)
  And Nz(T.[Montant],0)=0;

PS:A utiliser avec les précautions d'usage lorsqu'on supprime.



Merci pour la réponse, je teste demain au boulot
Avatar
jc
On 8 août, 12:47, jc wrote:
On 7 août, 14:45, Michel__D
wrote:



> Bonjour,

> jc a écrit :

> > On 6 août, 19:29, Michel__D
> > wrote:
> >> Bonjour,

> >> jc a écrit :

> >>> Bonjour,
> >>> J'ai une table présenté comme suit (en version simplifiée)
> >>> n'Credit   Montant
> >>> 19400     562,00
> >>> 19500     452,00
> >>> 19400     0.00
> >>> 19600     0.00
> >>> Je souhaiterai (par le biais d'une requête access) supprimer le
> >>> doublon dont la valeur est nulle, et non toutes les valeurs nulles
> >>> (conserver dans mon exemple le crédit 19600)
> >>> merci pour votre aide
> >> En fait il faudrait savoir si c'est seulement le doublon (valeur nul le)
> >>   ou le cas échéant les doublons de valeur nulle.

> >> Exemple :
> >> n'Credit   Montant
> >> 19400     562,00
> >> 19500     452,00
> >> 19400     0.00
> >> 19600     0.00
> >> 19400     0.00

> >> Faut-il supprimer un seul "19400     0.00" ou les deux ?

> > Je souhaiterai conserver pour le crédit 19400 la valeur 562 et donc
> > supprimer la valeur nulle pour le 19400 et conserver la valeur nulle
> > pour le crédit 19600. Pour résumé je souhaite supprimer les dou blons
> > sur les crédit dont le montant est égal à 0

> > merci pour votre aide

> Tu filtre les [n'Credit] qui ont plus d'un enregistrement :

> SELECT [n'Credit] FROM LaTable GROUP BY [n'Credit] HAVING Count(Montant )>1;

> Et tu supprime les enregistrements dont le [n'Credit] apparaît dans l a requête
>   ci-dessus et dont le [Montant] est égal à zéro.

> DELETE T.*
> FROM LaTable AS T
> WHERE T.[n'Credit] IN (SELECT [n'Credit] FROM LaTable GROUP BY [n'Credi t] HAVING Count(Montant)>1)
>   And Nz(T.[Montant],0)=0;

> PS:A utiliser avec les précautions d'usage lorsqu'on supprime.

Merci pour la réponse, je teste demain au boulot



Par contre, s'agit-il de deux requêtes SQL ou de VBA ???
Avatar
Michel__D
Bonjour,

jc a écrit :
On 8 août, 12:47, jc wrote:
On 7 août, 14:45, Michel__D
wrote:



Bonjour,
jc a écrit :
On 6 août, 19:29, Michel__D
wrote:
Bonjour,
jc a écrit :
Bonjour,
J'ai une table présenté comme suit (en version simplifiée)
n'Credit Montant
19400 562,00
19500 452,00
19400 0.00
19600 0.00
Je souhaiterai (par le biais d'une requête access) supprimer le
doublon dont la valeur est nulle, et non toutes les valeurs nulles
(conserver dans mon exemple le crédit 19600)
merci pour votre aide


En fait il faudrait savoir si c'est seulement le doublon (valeur nulle)
ou le cas échéant les doublons de valeur nulle.
Exemple :
n'Credit Montant
19400 562,00
19500 452,00
19400 0.00
19600 0.00
19400 0.00
Faut-il supprimer un seul "19400 0.00" ou les deux ?


Je souhaiterai conserver pour le crédit 19400 la valeur 562 et donc
supprimer la valeur nulle pour le 19400 et conserver la valeur nulle
pour le crédit 19600. Pour résumé je souhaite supprimer les doublons
sur les crédit dont le montant est égal à 0
merci pour votre aide


Tu filtre les [n'Credit] qui ont plus d'un enregistrement :
SELECT [n'Credit] FROM LaTable GROUP BY [n'Credit] HAVING Count(Montant)>1;
Et tu supprime les enregistrements dont le [n'Credit] apparaît dans la requête
ci-dessus et dont le [Montant] est égal à zéro.
DELETE T.*
FROM LaTable AS T
WHERE T.[n'Credit] IN (SELECT [n'Credit] FROM LaTable GROUP BY [n'Credit] HAVING Count(Montant)>1)
And Nz(T.[Montant],0)=0;
PS:A utiliser avec les précautions d'usage lorsqu'on supprime.


Merci pour la réponse, je teste demain au boulot



Par contre, s'agit-il de deux requêtes SQL ou de VBA ???



Apparemment tu ne pratique pas le VBA et guère plus les requêtes SQL.

J'ai décomposé la procédure, mais seule la dernière requête SQL est à utiliser
(la 1ère requête se retrouve dans la 2ème requête).

Par contre je t'encourage à faire une sauvegarde avant ou d'agir sur une copie.
Avatar
db
Le 04/08/2010 17:42, jc a écrit :
Bonjour,

J'ai une table présenté comme suit (en version simplifiée)
n'Credit Montant
19400 562,00
19500 452,00
19400 0.00
19600 0.00

Je souhaiterai (par le biais d'une requête access) supprimer le
doublon dont la valeur est nulle, et non toutes les valeurs nulles
(conserver dans mon exemple le crédit 19600)

merci pour votre aide



Une requête SQL comme celle-ci pourrait peut-être faire l'affaire :

Delete from Table
where montant=0 and n'Credit in (select n'Credit from Table where
montant <> 0)


db