rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Résolu

SQL : Exclusion de données

Posté par IMBERNONC, le jeudi 24 avril 2008 à 15:14:20
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
Configuration: Win 2000 Server
SQL 2000
Répondre à IMBERNONC  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Paglop, le jeudi 24 avril 2008 à 15:37:56
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')
Répondre à Paglop

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
IMBERNONC, le jeudi 24 avril 2008 à 15:47: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
Répondre à IMBERNONC

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Paglop, le jeudi 24 avril 2008 à 15:53:20
tu veut que la derniere ou celle de 2008 ?
Répondre à Paglop

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
IMBERNONC, le jeudi 24 avril 2008 à 16:13:09
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+
Répondre à IMBERNONC

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Dimitriù, le jeudi 24 avril 2008 à 15:44:49
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, à+!
Répondre à Dimitriù

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
IMBERNONC, le jeudi 24 avril 2008 à 15:53:29
Salut Dimitriù,

tout d'abord merci de te pencher sur mon problème.

Pour ta question, oui c'est ça il ne me faut que les clients qui on un code A ou D (ou A et D). Si un client a un code A et un code F par exemple je ne le veux pas...

Dan mon exemple effectivement le client 16 a un code D et un code A, mais comme il a aussi un code C, il doit etre exclu ! C'est ce point qui me pose problème....

Merci d'avance,

A+

Imbernonc
Répondre à IMBERNONC

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Paglop, le jeudi 24 avril 2008 à 15:59:39
sinon tu remplace dans la condition tout les where comme ceux ci

where code<>'b' and code<>'c' and code<>'e' ....
Répondre à Paglop

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
IMBERNONC, le jeudi 24 avril 2008 à 16:48:28
si je remplace par ce que tu me dis,

on retombe sur le même probleme... Il exclu effectivement les lignes ou il y a un F un G....et ne garde que les lignes oou il y a un A ou un D, sauf que du coup si on a ça :

Client code

16 A
16 G
25 A
25 D

Il va me garder mes 2 clients car il va garder les lignes 1, 3 et 4 alors qu'il ne devrait pas garder le client N° 16 (car il n'a pas que du A ou du D...)

Je tourne en rond...

Merci à toi
Répondre à IMBERNONC

10


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
Paglop, le jeudi 24 avril 2008 à 17:11:55
Et si tu fait ça :
==>selectionner ceux que tu veut pas
==>prendre les client qui ne figure pas dans ceux que tu veut pas !!!


SELECT distinct CLI_nom, CLI_adr, CLI_tel FROM Client, Reaction
were client<>(SELECT distinct client FROM reaction WHERE CODE='b' Or code='c' CODE='e' Or code='f')
Répondre à Paglop

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
IMBERNONC, le jeudi 24 avril 2008 à 17:24:03
Oui c'est ce que je pensais faire.

J'ai une premiere requete qui fonctionne qui me donne les N° de client que je ne veux pas.

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'

Du coup j'ai fait ça pour ne garder que les autres :

Select distinct client from reaction WHERE client <> (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')

Mais il mouline et au bout d'un moment j'ai un message d'erreur :

Serveur : Msg 512, Niveau 16, État 1, Ligne 2
La sous-requête a retourné plusieurs valeurs. Cela n'est pas autorisé quand la sous-requête suit =, !=, <, <= , >, >= ou quand elle est utilisée en tant qu'expression.

... Je sens que je ne suis pas tres loin (au moins pour récupérer les N°... la suite on verra plus tard...)

Merci

A+
Répondre à IMBERNONC

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Paglop, le jeudi 24 avril 2008 à 17:30:53
Tu n'aurait pas oublié le point virgule ?

Et sit tu enleve les [ ] ?
Répondre à Paglop

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
IMBERNONC, le jeudi 24 avril 2008 à 17:37:12
oui j'ai zappé tout ce qui est entre []...meme message.

Par contre je ne vois pas où je peux rajouter un ";" ??

Merci de ton aide...
Répondre à IMBERNONC

14


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Paglop, le jeudi 24 avril 2008 à 17:41:43
le point virgue est a mettre a chaque fin de requette
Répondre à Paglop

15


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Paglop, le jeudi 24 avril 2008 à 17:55:09
je crois me rappellé que le ";" ou "," demend des logiciel : sous acces c'est pas pareil que sous oracle
Dit moi si ca marche
Répondre à Paglop

16


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
IMBERNONC, le jeudi 24 avril 2008 à 17:55:58
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+
Répondre à IMBERNONC

17


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Paglop, le jeudi 24 avril 2008 à 18:02:56
pour moi l'erreur est dans la deuxiemme ligne de on code
Répondre à Paglop

18


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
imbernonc, le jeudi 24 avril 2008 à 21:24:47
Re !!
tu ferais quoi comme code alors ??

A+
Répondre à imbernonc

4


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
Paglop, le jeudi 24 avril 2008 à 15:51:39
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
Répondre à Paglop

19


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
IMBERNONC, le vendredi 25 avril 2008 à 11:02:51
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....
Répondre à IMBERNONC

20


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
paglop !!!, le vendredi 25 avril 2008 à 13:37:17
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.
Répondre à paglop !!!

21


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 imbernonc, le lundi 5 mai 2008 à 08:37:02
Tout fonctionne comme je le souhaite, c'est bon.

Merci pour votre aide et surtout merci à Paglop !!

Imbernonc.
Répondre à imbernonc
Logiciels pertinents trouvés dans les téléchargements
Télécharger WAMP Server 2.0cWAMP Server - WAMP5 (WAMP signifiant Windows Apache Mysql PHP) est une plateforme de développement Web sous Windows. Il vous permet de...Catégorie: Serveurs
Licence: Freeware/gratuit
Télécharger MySQL 5.0.51bMySQL - MySQL est une des systèmes de gestion de bases de données le plus répandu au monde. Catégorie: Bases de données
Licence: Open Source
Télécharger Restoration 2.5.14Restoration - Restoration est un outil gratuit, en anglais seulement, permettant de récupérer les données effacées, même après avoir vidé...Catégorie: Sauvegarde
Licence: Freeware/gratuit
Télécharger DB Designer 4.0.5.6DB Designer - DB designer 4 est un logiciel permettant de concevoir visuellement des bases de données. Il possède également des fonctions...Catégorie: Bases de données
Licence: Open Source
Plus de logiciels gratuits sur « SQL : Exclusion de données »