Les Allergies
Alimentaires
Posez votre question Signaler

SQL : Exclusion de données [Résolu]

IMBERNONC 9Messages postés 24 avril 2008Date d'inscription - Dernière réponse le 5 mai 2008 à 08:37
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
Lire la suite 

SQL : Exclusion de données »

21 réponses
Réponse
+3
moins plus
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.
imbernonc - 5 mai 2008 à 08:37
Tout fonctionne comme je le souhaite, c'est bon.

Merci pour votre aide et surtout merci à Paglop !!

Imbernonc.
Ajouter un commentaire
Réponse
+1
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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
http://www.commentcamarche.net/sql/sqlintro.php3

sinon pour trouvé la lettre c'est juste un select ... where lettre='A' OR lettre ='D (OR lettre='AD')
IMBERNONC- 24 avril 2008 à 15:47
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
Paglop - 24 avril 2008 à 15:53
tu veut que la derniere ou celle de 2008 ?
IMBERNONC- 24 avril 2008 à 16:13
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+
Ajouter un commentaire
Réponse
+0
moins plus
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, à+!
IMBERNONCPaglop - 24 avril 2008 à 17:55
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+
Paglop - 24 avril 2008 à 18:02
pour moi l'erreur est dans la deuxiemme ligne de on code
imbernonc - 24 avril 2008 à 21:24
Re !!
tu ferais quoi comme code alors ??

A+
Ajouter un commentaire
Réponse
+0
moins plus
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....
Ajouter un commentaire
Ce document intitulé « SQL : Exclusion de données » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?