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 :

Plusieurs LIKE dans ma requête


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut Plusieurs LIKE dans ma requête
    Salut,

    j'aimerais récupérer les champs qui appatiennent à la région languedoc-roussillon.
    j'ai fait cette requêtes mais ne me renvoi rien alors que les champs sont remplis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT SUM(MontantCATTC), SUM(NbVenteArticle)
    FROM TBResultatJour PTB, TBMagasin STB
    WHERE PTB.CodeMagasin = STB.CodeMagasin
    AND CPMagasin LIKE '11%'
    AND CPMagasin LIKE '30%'
    AND CPMagasin LIKE '34%'
    AND CPMagasin LIKE '48%'
    AND CPMagasin LIKE '66%'
    Avez-vous une petite idée sur la question ?
    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Quel est le type de données de l'attribut CPMagasin ?

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut
    C'est un nvarchar

  4. #4
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    Tu ne veux pas obtenir les enregistrements dont CPMagasin commence par '11' ET les enregistrements dont CPMagasin commence par '30', mais les enregistrements dont CPMagasin commence par '11' OU les enregistrements dont CPMagasin commence par '30'.

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut
    En fait je veux la somme du CA et des Ventes pour la région Languedoc-Roussillon (soit de tous les départements sités)

  6. #6
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Je comprends. Je reformule ma question : penses-tu, en regardant la clause WHERE de ta requête, qu'il soit possible de trouver un enregistrement qui a sa colonne CPMagasin qui commence par 11, et en même temps qui commence par 30, et en même temps qui commence par 34, ... ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT SUM(MontantCATTC), SUM(NbVenteArticle)
    FROM TBResultatJour PTB INNER JOIN TBMagasin STB
    ON PTB.CodeMagasin = STB.CodeMagasin
    WHERE LEFT(CPMagasin,2) in ('11', '30', '34', '48', '66')

  8. #8
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Salut Zers,

    Une remarque : En mettant l'opérande de gauche dans une fonction (LEFT(CPMagasin,2)), tu empèches SQL Server d'utiliser un index s'il y en a un.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    Citation Envoyé par rudib
    Salut Zers,

    Une remarque : En mettant l'opérande de gauche dans une fonction (LEFT(CPMagasin,2)), tu empèches SQL Server d'utiliser un index s'il y en a un.
    c noté

  10. #10
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut
    Salut,

    désolé mais j'étais à ma pause déjeuner
    Tout d'abord merci à vous, puis pour répondre à rudib, en fait j'ai ma table TBMagasin qui contient les infos administratives de mes magasins et le table TBResultatJour le CA et les autres résultats, je pense quand faisant la liaison entre ces deux tables par le champ CodeMagasin qu'ils ont en commun je pourrais récupérer la somme de tous les CA des départements...
    Sinon la solution de ZERS ne fonctionne pas?

  11. #11
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Oui, elle fonctionne. Je suis désolé de ne pas avoir réussi à rendre ma question claire. En réalité j'essayais d'attirer ton attention sur le problème dans la clause WHERE : Tu utilises des AND alors qu'il faut lier tes critères par des OR.

  12. #12
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut
    Merci rudib, mais en fait j'avais déjà exécuter ma requête avec les OR, cela fonctionne pour les régions qui comportent des enregistrements dans la table TBresultatJour mais pour une autre région qui ne comporte aucun enregistrement et qui devrait donc me renvoyer NULL, me revoit des résultats, c'est a n'y rien comprendre
    Peut être que j'ai des problèmes de liaisons avec mes tables ?
    Je vais tester la solution de ZERS
    Encore merci

  13. #13
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    La solution avec des OR donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT SUM(MontantCATTC), SUM(NbVenteArticle)
    FROM dbo.TBResultatJour PTB
    JOIN dbo.TBMagasin STB ON PTB.CodeMagasin = STB.CodeMagasin
    WHERE 
    stb.CPMagasin LIKE '11%'
    OR stb.CPMagasin LIKE '30%'
    OR stb.CPMagasin LIKE '34%'
    OR stb.CPMagasin LIKE '48%'
    OR stb.CPMagasin LIKE '66%'
    Si tu as laissé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    WHERE PTB.CodeMagasin = STB.CodeMagasin
    OR CPMagasin LIKE '11%'
    OR CPMagasin LIKE '30%'
    OR CPMagasin LIKE '34%'
    OR CPMagasin LIKE '48%'
    OR CPMagasin LIKE '66%'
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    WHERE PTB.CodeMagasin = STB.CodeMagasin
    AND (CPMagasin LIKE '11%'
    OR CPMagasin LIKE '30%'
    OR CPMagasin LIKE '34%'
    OR CPMagasin LIKE '48%'
    OR CPMagasin LIKE '66%')
    , ne t'étonne de rien.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    J'ajoute qu'avant de tester ma solution, essaie dela comprendre, tu verras tout de suite si ca marche ou pas.

    Je ne sais pas combien tu as de lignes dans tes tables, mais si t'a 10millions de lignes qqpart, vaut mieux s'assurer que la requete s'adosse à ton modèle de données avant de la lancer et attendre 1/4d'h de voir que les résultats sont faux

  15. #15
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut
    Salut,

    les tests ont été effectués avec succés, je vous remercie. Sinon pour les requêtes je les ai bien évidemment analyser avant de les lancer.

    Merci pour tout, je vous tiens au courant si vous avez quoi que soit

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PDO] Plusieurs LIKE dans la requête PDO
    Par dancom5 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/06/2013, 14h11
  2. Plusieurs SUM dans une requête
    Par pj69100 dans le forum Requêtes
    Réponses: 6
    Dernier message: 02/01/2007, 10h34
  3. Sous-requête excutée plusieurs fois dans une requête
    Par sheridan31 dans le forum Oracle
    Réponses: 8
    Dernier message: 03/07/2006, 16h18
  4. Plusieurs jointures dans une requête sql
    Par Pero dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/09/2005, 20h59
  5. Plusieurs LIKE dans une requete ?
    Par beastman007 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 22/02/2005, 12h10

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