IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Recherches multi critères multi tables SQL


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 37
    Par défaut Recherches multi critères multi tables SQL
    Hello tout le monde,

    Mon but serait de remplacer une macro excel qui tourne pendant 5h chaque jour en code sql.

    Données:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TABLE 1 
    - Colonne 1 = T1_ID
    - Colonne 2 = c1
    - Colonne 3 = c2
    - Colonne 4 = c3
    *c = "critère de recherche"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TABLE 2
    - Colonne 1 = i1
    - Colonne 2 = i2
    - Colonne 3 = i3
    - Colonne 4 = i4
    *i = "information"

    Le but serait donc pour chaque ligne de la Table2 de trouver le T1_ID correspondant suivant plusieurs critères
    Aussi, suivant le critère de recherche qui a donné un résultat, il faudrait que le numéro de ce dernier soit repris en colonne 6
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [a] si c1 dans i1 then Colonne5 = T1_ID And Colonne6 = "a"
    [b] si c1+c2 dans i1 + c3 dans i3 then Colonne5 = T1_ID And Colonne6 = "b"
    [c] si c1+c2-c3 dans i1 then Colonne5 = T1_ID And Colonne6 = "c"
    Exemple:

    TABLE 1 (voitures):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MODELE         ORIGINE         MOTEUR        COULEUR 
     
    Peugeot Ext    France          Diesel        Bleu
    Rover 75       Italie          Essence       Rouge   
    Citroën  C4    Allemagne       Essence       Vert


    TABLE 2 (informations trouvées):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    I1                 I2                         I3                           I4                
     
    Ma voiture verte   Elle roule avec essence    Une Rover 75 superbe         Achetée en Italie

    Ce qui donne après recherche l'ajout des 2 dernières colonnes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    I1                 I2                         I3                           I4                    ID       LEVEL
     
    Ma voiture verte   Elle roule avec essence    Une Rover 75 superbe         Achetée en Italie     5482     D
    Elle a donc résussis sur le critère D :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if i1 like "*verte*" And i2 like "*essence*" And i3 Like "*Rover 75*" And i4 Like "*Italie*" Then i5 = "*5482*" And i6 = "D"


    En Excel, j'utilise ce genre de chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Range("A1").Select
    Do While ActiveCell.Value <> Empty
    ActiveCell.Offset(0, 0).Range("A1").Select
     
    If Selection.Value Like "*c1*" And Not Selection.Value Like "*c2*" Then: ActiveCell.Offset(0, 6).Range("A1").Value = "T1_ID‡2"
     
    ActiveCell.Offset(1, 0).Range("A1").Select
    Loop
    Un immense immense immense merci à celle ou celui qui pourra m'aider.

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Si j'ai compris et en corrigeant les points obscurs que sont :

    [b] si c1+c2 dans i1 + c3 dans i3 then Colonne5 = T1_ID AND Colonne6 = "b"
    [c] si c1+c2-c3 dans i1 then Colonne5 = T1_ID AND Colonne6 = "c"
    cela donnerait quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    UPDATE		dbo.table_2
    SET		ID = T1.ID
    		, level = CASE
    				WHEN T2.i1 LIKE '%' + T1.c1 + '%' + T1.c2 + '%' + T1.c3 + '%' THEN 'C'
    				WHEN T2.i1 + ' ' + T2.i2 LIKE T1.c1 + '%' + T1.c2 + '%' THEN 'B'
    				WHEN T2.i1 LIKE '%' + T1.c1 + '%' THEN 'A'
    			END
    FROM		dbo.table_2 AS T2
    INNER JOIN	dbo.table_1 AS T1
    			ON T2.i1 LIKE '%' + T1.couleur + '%'
    			OR T2.i2 LIKE '%' + T1.moteur + '%'
    			OR T2.i3 LIKE '%' + T1.modele + '%'
    			OR T2.i4 LIKE '%' + T1.origine + '%'
    Néanmoins il me semble que vous avez au départ un problème de modélisation de votre base de données ...

    @++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 37
    Par défaut
    Hello,

    Un tout grand merci pour ta réponse ... déjà, tu me fais comprendre que cela peut se concevoir ... ce qui enseoleille ma journée de 4 murs enfermée :-)

    En réalité, pour démystifier le côté obsur, concernant ma bd, les infos de départ proviendront de résultats de quantités de flux rss (un titre, un commentaire, etc.), donc, un embrouillamini d'articles en tous genres et toutes tailles.

    Ces articles seront ensuite analysés en fonction d'une table de "produits" afin de savoir lequel est concerné par l'article.
    Bref, pour cibler au maximum, je suis obligé de passer par plusieurs critères de recherche que ce soit sur le titre de l'article ou son contenu. Ceci afin de n'avoir plus qu'une infime partie de résultats à devoir trier manuellement.

    Je vais déjà essayer de tester ce que tu m'as présenté et reviendrai à la charge avec, assurément, moultes questions. ;-)

    Merci beaucoup elsuket

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 240
    Par défaut
    Comment fais-tu pour lire des flux RSS en SQL Server ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 37
    Par défaut
    Citation Envoyé par Philippe Robert Voir le message
    Comment fais-tu pour lire des flux RSS en SQL Server ?
    Hum ... je n'avais pas cherché longtemps, je voulais juste savoir si c'est possible et ça l'est apparement. Sauf erreur de ma part :

    http://blogs.msdn.com/b/jgalla/archi...13/464881.aspx
    http://msdn.microsoft.com/en-us/beginner/bb308832.aspx

    Sinon, je comptais utiliser Awasu que je peux laisser tourner 24h/24 sur le server et qui peut créer des rappports automatiques toutes les x minutes et ensuite, script d'importation automatique dans sql.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 37
    Par défaut
    Hello elsuket,

    Bon, j'essaye pas divers moyens mais je patauge ...

    Bref, pourrais-tu retranscrire ton code sur base d'un exemple plus simple?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT 'Status' = CASE
     
    WHEN Table1.Colonne1 Like 'mot_1' THEN 'OK' 
     
         ELSE ''
         END
     
    FROM Table1
    Et c'est ici avec le INNER JOIN que je ne comprends pas ... car à la base, aucune liaison n'existe entre les 2 tables ...

    Donc, imaginons que le mot à trouver "mot" se trouve dans une autre table (Table2). Cette table ne contient qu'une colonne qui contient 5000 mots à rechercher ...

    Le principe est donc celui du vlookup excel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    S'il trouve dans la ligne 1 de la Table1 le "mot" de la ligne 1 de la Table2 alors mettre en nouvelle colonne 'Status' de la Table1 : "mot_1_info_complémentaire"
    S'il trouve dans la ligne 1 de la Table1 le "mot" de la ligne 2 de la Table2 alors mettre en nouvelle colonne 'Status' de la Table1 : "mot_2_info_complémentaire"
    S'il trouve dans la ligne 1 de la Table1 le "mot" de la ligne 3 de la Table2 alors mettre en nouvelle colonne 'Status' de la Table1 : "mot_3_info_complémentaire"
     
    S'il trouve dans la ligne 2 de la Table1 le "mot" de la ligne 1 de la Table2 alors mettre en nouvelle colonne 'Status' de la Table1 : "mot_1_info_complémentaire"
    S'il trouve dans la ligne 2 de la Table1 le "mot" de la ligne 2 de la Table2 alors mettre en nouvelle colonne 'Status' de la Table1 : "mot_2_info_complémentaire"
    S'il trouve dans la ligne 2 de la Table1 le "mot" de la ligne 3 de la Table2 alors mettre en nouvelle colonne 'Status' de la Table1 : "mot_3_info_complémentaire"
     
    S'il trouve dans la ligne 3 de la Table1 le "mot" de la ligne 1 de la Table2 alors mettre en nouvelle colonne 'Status' de la Table1 : "mot_1_info_complémentaire"
    S'il trouve dans la ligne 3 de la Table1 le "mot" de la ligne 2 de la Table2 alors mettre en nouvelle colonne 'Status' de la Table1 : "mot_2_info_complémentaire"
    S'il trouve dans la ligne 3 de la Table1 le "mot" de la ligne 3 de la Table2 alors mettre en nouvelle colonne 'Status' de la Table1 : "mot_3_info_complémentaire"
    Merci mille fois ...

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/03/2014, 02h42
  2. [AC-2010] Recherche Multi-critére via Macro,Sql et/ou Vba
    Par jaraf dans le forum Access
    Réponses: 11
    Dernier message: 22/05/2013, 10h31
  3. [AC-2007] recherche d'un elément table SQL via VBA
    Par johanaquatique dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 11/07/2010, 09h18
  4. [BP7] Multi-cpu, multi-core, multi-thread et programme Pascal
    Par Transgarp dans le forum Turbo Pascal
    Réponses: 6
    Dernier message: 07/04/2008, 18h43
  5. problème SQL avec le tutoriel recherche multi critère
    Par qbihlmaier dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/12/2005, 19h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo