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 :

REQUETE avec plusieurs paramètres et condition


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 241
    Points : 83
    Points
    83
    Par défaut REQUETE avec plusieurs paramètres et condition
    Bonjour a tous,

    jai une procédure stockée avec plusieurs paramètres et je voudrias faire un tri successif a l'aide des critères de recherche...

    j'ai une succession de IF avec chaque paramètre mais je voudrias que le premier IF sorte une liste, que le second prenne cette liste et applique son filtre...etc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    --retourne un liste
    IF (@NumDoc IS NOT NULL)
    (
    	SELECT * FROM  cw_TicketProcessing 
    	WHERE Documentid = @NumDoc
    )
    --parmis cette liste faire ...
    IF (@DocType IS NOT NULL)
    (
    	SELECT * FROM  cw_TicketProcessing 
    	WHERE DocumentType = @DocType
    )
    --puis faire ...
    IF (@FirstDate IS NOT NULL)
    (
    	SELECT * FROM  cw_TicketProcessing 
    	WHERE (IssueDate > @FirstDate)
    )
    IF (@LastDate IS NOT NULL)
    (
    	SELECT * FROM  cw_TicketProcessing 
    	WHERE (IssueDate < @LastDate)
    )

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 756
    Points : 52 534
    Points
    52 534
    Billets dans le blog
    5
    Par défaut
    Quelquechose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT * 
    FROM   cw_TicketProcessing 
    WHERE  Documentid = COALESCE(@NumDoc, Documentid )
       OR  DocumentType = COALESCE(@DocType, DocumentType)
       OR  IssueDate > COALESCE(@FirstDate, IssueDate)
    ...
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 241
    Points : 83
    Points
    83
    Par défaut
    Merci mais si je veux faire une requête avec tout mes paramètres ? le OR ne fonctionnera pas...

  4. #4
    Membre régulier
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    165
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 165
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par dahu17
    Merci mais si je veux faire une requête avec tout mes paramètres ? le OR ne fonctionnera pas...
    Bonjour,
    Autre que la solution proposé par notre collègue, et qui se base sur l'operateur logique OR, je penserai au pipe logique.
    l'idée consisterai à utiliser une table intermédiaire:::
    definir une table tab_inter ayant la même structure que celle d'origine
    appliquer la premiere condition sur les données en entree (d'origine)
    le resultat sera stocké ds la table tab_inter
    appliquer la premiere condition sur les données stockées ds tab_inter
    le contenu de tab_inter sera ecrasé et y sera stocké le résultat de la deuxieme condition
    .....
    etc.
    Apres l'application de la derniere condition, tu aura tab_inter qui contien le resultat du fitrage des
    données d'origine par la serie des conditions appliquées en cascade.

    NB. tu peux recuperer les resultat de la serie Cond_1, Cond_2.... Cond_i, ds un nouveau table....

    bn courage
    PMS

  5. #5
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 241
    Points : 83
    Points
    83
    Par défaut
    Merci beaucoup, c'est une solution qui pourrait convenir oui mais quand tu applique un filtre (condition) mais qu'il n'y a aucun résultat, tu va écraser la table intermédiaire qui sera alors vide ... ?

  6. #6
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 241
    Points : 83
    Points
    83
    Par défaut
    Je vais executer une chaine de caractère et composer ma requête dynamiquement... merci pour votre aide

  7. #7
    Membre régulier
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    165
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 165
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par dahu17
    Merci beaucoup, c'est une solution qui pourrait convenir oui mais quand tu applique un filtre (condition) mais qu'il n'y a aucun résultat, tu va écraser la table intermédiaire qui sera alors vide ... ?

    pour ne pas ecraser la table, et si tu as besoin de tous les résultat,
    en copiyant la structure de la table, ajoute une colonne que tu peux nommer,
    insert_level, qui prendra a quel etape de ton processus a eu l'insertion, apres la premiere condition insert_level prendra 1 pour touts les lignes ajoutées, apres la deuxieme condition, elle prendra 2.......

    ainsi, tu aura une table de collecte et qui garde la trace de tes resultat même intermediere.

    Merci
    PMS

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

Discussions similaires

  1. requete avec plusieurs conditions
    Par hypothese dans le forum Requêtes
    Réponses: 6
    Dernier message: 30/09/2009, 17h15
  2. requete avec plusieurs conditions
    Par louis85 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 26/05/2008, 10h50
  3. Réponses: 3
    Dernier message: 04/06/2007, 12h29
  4. requete avec plusieurs tableaux
    Par isa21493 dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/03/2006, 15h19
  5. [UPDATE]Sous-requetes avec plusieurs nuplets
    Par Tchinkatchuk dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/07/2005, 18h28

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