SQL : Exclusion de données

[Résolu/Fermé]
Signaler
Messages postés
9
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
25 avril 2008
-
 imbernonc -
Bonjour à tous,

Je suis Responsable du système d'information dans une PME et je dois extraire des données de notre base SQL pour effectuer une analyse. Voici le tableau.

2 tables dans ma base m'intéressent :
la table "client" et la table "reaction". La table client contient les informations du client (adresse, tel, etc...). La table "réaction" contient son activité (commandes, paiements...).

Dans la table "reaction", 2 champs m'intéressent :
le champ "client" qui contient le N° du client
le champ "code" qui contient un code correspondant à une réaction (C=commande, B=paiement...)

Voici un exemple de contenu de cette table :

Client DateReaction Code

16 2007-04-04 00:00:00.000 A
16 2008-03-31 00:00:00.000 C
16 2008-03-31 00:00:00.000 D
25 2007-10-31 00:00:00.000 D
25 2008-01-28 00:00:00.000 A
86 2003-10-08 00:00:00.000 A


Ce que je souhaite c'est ne selectionner que les clients qui ont soit un D, soit un A (ou un D et un A) mais rien d'autre. si un client a un "D, un "A" et autre chose je ne le veux pas !

Si on prend notre exemple ci dessus, la requete devrait me retourner ceci :

25
86

le client 16 ayant un code C, il n'est pas selectionné.


Une fois ce résultat obtenu il faudrait que je puisse le comparer à la table "client" et que je récupère les infos (nom, adresse, numéro de tel...) de tous les clients sélectionnés auparavant. On retrouve le champ "client" contenant le N° du client dans la tables "client".


Voilà donc ma problematique. Je pense qu'il faut procéder par étape et déjà trouver la solution pour la selection de mes clients...

Merci d'avance à tous....

Imbernonc

5 réponses

Messages postés
633
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
3 novembre 2015
233
SELECT client.champ1, client.champ2 , ... from client , reaction 
WHERE client.code=(Select distinct client from reaction WHERE client not in (Select distinct client from reaction WHERE [reaction].Code ='b' or [reaction].Code='c' or [reaction].Code='G' or [reaction].Code='E' or [reaction].Code='K' or [reaction].Code='F' or [reaction].Code='N' or [reaction].Code='R')

Je me souvenait plus du not in pourtant je l'ai deja vu.
4
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41713 internautes nous ont dit merci ce mois-ci

Tout fonctionne comme je le souhaite, c'est bon.

Merci pour votre aide et surtout merci à Paglop !!

Imbernonc.
desolé j'avais pas tout lu !!! Les nom des champ ne sont pas geniale a la place de client j'aurai plutot mis CLI_numero

SELECT CLI_nom, CLI_adr, CLI_tel   FROM Client, Reaction
WHERE client=(SELECT distinct client FROM reaction WHERE CODE='a' Or code='D')


ps le distinct sert a n'afficher qu'une seule foix les client
Il faudrait le nom des tables et des champs

tu peut te renseigné sur internet sur les jointures (pour passer d'une table a une autre: te sert pour retrouver le nom a partir de la refernce client; et les requetes imbriqué (requete a partir d'une requette)

il ya un leger cour sur ccm ici
https://www.commentcamarche.net/contents/1062-le-langage-sql

sinon pour trouvé la lettre c'est juste un select ... where lettre='A' OR lettre ='D (OR lettre='AD')
Messages postés
9
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
25 avril 2008

Merci Paglop pour cette première réponse,
je vais regarder le liens que tu me propose.

Concernant le select lettre='A'... ça ne peut pas me donner le bon resultat, car il va me sortir tous les clients qui ont eu une reaction A, sauf que le client qui a eu un A en 2004 et un F en 2005, je vais le retrouver dans cette liste. Mais moi je ne veux pas ceux qui ont eu autre chose qu'un A ou un D (par exemple)....

Merci encore et A+

imbernonc
>
Messages postés
9
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
25 avril 2008

tu veut que la derniere ou celle de 2008 ?
Messages postés
9
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
25 avril 2008
> Paglop
Non en fait je ne veux obtenir qu'une fois le N° de client (donc distinct) mais seulement des clients ayant eu uniquement comme reaction A ou D (ou A et D) et absolument rien d'autre depuis qu'ils sont clients ( donc de 19xx à 2008)...

A+
Messages postés
170
Date d'inscription
mercredi 28 novembre 2007
Statut
Membre
Dernière intervention
1 décembre 2014
44
Salut Imbernonc,
je pense que je vais pouvoir t'aider mais je voudrai être sur d'avoir bien compris.
Tu voudrais qu''une seule requête te permette d'avoir les infos sur les clients dont le "code-réaction" est A ou D?
Il te faut leur numéro aussi?

Une dernière chose dans ton exemple à la troisième ligne, le client 16 a un code D... :D).
J'attends ta réponse, à+!
>
Messages postés
9
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
25 avril 2008

le point virgue est a mettre a chaque fin de requette
> Paglop
je crois me rappellé que le ";" ou "," demend des logiciel : sous acces c'est pas pareil que sous oracle
Dit moi si ca marche
Messages postés
9
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
25 avril 2008
> Paglop
Change rien le ; ...

Je risque de pas répondre un petit moment car je rentre à la maison....

Merci encore pour ton aide, je pense que Dimitriù est aussi en train de se creuser la tête (j'espere)...

A+
>
Messages postés
9
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
25 avril 2008

pour moi l'erreur est dans la deuxiemme ligne de on code
> Paglop
Re !!
tu ferais quoi comme code alors ??

A+
Messages postés
9
Date d'inscription
jeudi 24 avril 2008
Statut
Membre
Dernière intervention
25 avril 2008

Salut à tous,

Alors, j'ai ma requete qui me garde mes bons clients :

Select distinct client from reaction WHERE client not in (Select distinct client from reaction WHERE [reaction].Code ='b' or [reaction].Code='c' or [reaction].Code='G' or [reaction].Code='E' or [reaction].Code='K' or [reaction].Code='F' or [reaction].Code='N' or [reaction].Code='R').

En fait il fallait simplement un " not in" à la plce des " <>"

Merci Paglop pour ton aide

Je savais que j'y étais presque....

Maintenant la deuxieme étape...il faut que je compare cette liste de numero [REACTION].client au numero client de la table client [CLIENT].client....

A suivre....