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

Développement SQL Server Discussion :

120 Requetes SQL


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 401
    Par défaut 120 Requetes SQL
    Bonjour,
    Elements de ma requête :
    1) Table : MaTable1
    2) Résultat à afficher : T1, T2
    3) Conditions : c1, c2, c3, c4, c5

    J’ai 5 conditions : c1, c2, c3, c4, c5

    Besoin :
    Je dois trouver T1, T2 selon toutes les conditions possibles (Toutes les permutations possibles entre c1,c2,c3,c4,c5) ce qui me fait 120 combinaisons possibles, y’a-t-il une meilleurs façon de faire que ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select T1, T2
    From MaTable1
    Where 
    Macondition = c1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select T1, T2
    From MaTable1
    Where 
    Macondition = c2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select T1, T2
    From MaTable1
    Where 
    Macondition = c1, c2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select T1, T2
    From MaTable1
    Where 
    Macondition = c3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select T1, T2
    From MaTable1
    Where 
    Macondition = c1, c3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select T1, T2
    From MaTable1
    Where 
    Macondition = c1, c2, c3

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT T1, T2
    FROM MaTable1
    WHERE 
    Macondition = c1
    OR Macondition = c2
    OR Macondition = c3
    OR Macondition = c4
    OR Macondition = c5
    Tout simplement ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 401
    Par défaut
    Citation Envoyé par asmduty Voir le message
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT T1, T2
    FROM MaTable1
    WHERE 
    Macondition = c1
    OR Macondition = c2
    OR Macondition = c3
    OR Macondition = c4
    OR Macondition = c5
    Tout simplement ?
    Bien essayé mais je précise que le résultat de la requête nous fournira plusieurs lignes, exemple 20 lignes + 2 colonnes (T1, T2)

    on ne pourra pas dire quelle ligne correspond à quelle conditions :

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Selon l'utilisation voulue derrière il est possible de rajouter 5 colonnes à votre requête, une par condition, qui sont cochées si la ligne remplit la condition :

    T1, T2, Cond1, Cond2, Cond3, Cond4, Cond5
    , , OUI, NON, NON, NON, NON
    , , OUI, OUI, NON, NON, NON
    , , NON, OUI, NON, NON, NON
    , , OUI, OUI, OUI, NON, NON
    etc.

    Il suffit alors dé créer les colonnes avec un CASE (je ne sais plus la syntaxe exacte mais ça doit ressembler à ça) :

    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
    Select 
    T1, 
    T2, 
    Cond1 = CASE WHEN Macondition = c1 THEN 'OUI' ELSE 'NON' END, 
    Cond2 = CASE WHEN Maconditon = c2 THEN 'OUI' ELSE 'NON' END, 
    Cond3 = CASE WHEN Maconditon = c3 THEN 'OUI' ELSE 'NON' END, 
    Cond4 = CASE WHEN Maconditon = c4 THEN 'OUI' ELSE 'NON' END, 
    Cond5 = CASE WHEN Maconditon = c5 THEN 'OUI' ELSE 'NON' END
    FROM MaTable1
    WHERE 
    Macondition = c1
    OR Macondition = c2
    OR Macondition = c3
    OR Macondition = c4
    OR Macondition = c5

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 401
    Par défaut
    Citation Envoyé par asmduty Voir le message
    Selon l'utilisation voulue derrière il est possible de rajouter 5 colonnes à votre requête, une par condition, qui sont cochées si la ligne remplit la condition :



    etc.

    Il suffit alors dé créer les colonnes avec un CASE (je ne sais plus la syntaxe exacte mais ça doit ressembler à ça) :

    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
    Select 
    T1, 
    T2, 
    Cond1 = CASE WHEN Macondition = c1 THEN 'OUI' ELSE 'NON' END, 
    Cond2 = CASE WHEN Maconditon = c2 THEN 'OUI' ELSE 'NON' END, 
    Cond3 = CASE WHEN Maconditon = c3 THEN 'OUI' ELSE 'NON' END, 
    Cond4 = CASE WHEN Maconditon = c4 THEN 'OUI' ELSE 'NON' END, 
    Cond5 = CASE WHEN Maconditon = c5 THEN 'OUI' ELSE 'NON' END
    FROM MaTable1
    WHERE 
    Macondition = c1
    OR Macondition = c2
    OR Macondition = c3
    OR Macondition = c4
    OR Macondition = c5

    En faite j'ai proposé cette idée à mon Chef ... mais il m'a dit qu'il ne voulait pas s'embêter a filtrer sous Excel et à cocher/décocher les oui/non ... et il m'a même dit qu'il y'avait une méthode plus facile avec le CROSS Join ....

    Sauf qu'il ne m'a pas dit comment ? (je connais le CROSS JOIN mais je ne vois pas ce que ça va avancer de l'utiliser dans ce contexte) ?
    Merci

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Je ne suis pas un expert SQL, et encore moins du Cross Join, mais cette jointure n'est pas sensée retourner le produit carthésien des tables ?

    C'est quoi le but final ?
    Ou si c'est top secret pour la Nasa, un truc qui permet d'expliquer mieux pour qu'on sache exactement ce qui est attendu.

  7. #7
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Citation Envoyé par kadden Voir le message
    En faite j'ai proposé cette idée à mon Chef ... mais il m'a dit qu'il ne voulait pas s'embêter a filtrer sous Excel et à cocher/décocher les oui/non ... et il m'a même dit qu'il y'avait une méthode plus facile avec le CROSS Join ....
    Je ne vois pas de meilleure façon de faire. Et concrètement, il veut quoi ??? Parce que de toute façon il faudra bien "filtrer sous Excel" la valeur qu'il souhaite, non ? S'il souhaite n'avoir qu'une seule colonne à filtrer (genre le bosse flemmard), et qu'il n'est pas capable de faire la colonne excel supplémentaire tout seul (avec un concaténer), il suffit de le faire comme ceci :

    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
     
    SELECT 
    T1, 
    T2, 
      CASE WHEN WHEN Macondition = c1 THEN ' c1' ELSE '' END
    +CASE WHEN WHEN Macondition = c2 THEN ' c2' ELSE '' END
    +CASE WHEN WHEN Macondition = c3 THEN ' c3' ELSE '' END
    +CASE WHEN WHEN Macondition = c4 THEN ' c4' ELSE '' END
    +CASE WHEN WHEN Macondition = c5 THEN ' c5' ELSE '' END AS Conditions
    FROM MaTable1
    WHERE 
    Macondition = c1
    OR Macondition = c2
    OR Macondition = c3
    OR Macondition = c4
    OR Macondition = c5

Discussions similaires

  1. Problème Requete SQL et QuickReport
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 7
    Dernier message: 07/01/2004, 09h31
  2. Prob de requete sql et variable
    Par agent-zaizai dans le forum ASP
    Réponses: 11
    Dernier message: 21/10/2003, 16h54
  3. requete sql
    Par autumn319 dans le forum ASP
    Réponses: 22
    Dernier message: 10/09/2003, 16h46
  4. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 11h24
  5. Resultat requete SQL
    Par PierDIDI dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/07/2002, 13h43

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