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

Langage SQL Discussion :

Test intégré à la requête


Sujet :

Langage SQL

  1. #1
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut Test intégré à la requête
    Bonjour,

    j'aimerais trier les résultats d'un SELECT d'une façon spéciale,
    plus précisément trier sur 2 champs en même temps.
    Pour cela, je dois tester ces 2 champs et mettre le résultat de ce test dans un 3 ème champ... vous me suivez ? nan ? j'm'en doute...

    contexte :
    - 3 tables : personne(p_id, p_nom, p_id_categorie), groupe(g_id, g_nom, g_id_categorie), catégorie(c_id, c_nom)
    - un groupe appartient à [0,1] catégorie
    - une personne appartient à [0,1] catégorie
    - une personne appartient à [0,1] groupe

    Un SELECT simple m'afficherai 6 champs
    g_id, g_nom, g_categorie, p_id, p_nom, p_categorie
    mais j'ai veut seulement 5
    categorie, g_id, g_nom, p_id, p_nom
    sur ce principe :
    - si (g_catégorie = A) && (p_catégorie = B) alors categorie = A
    - si (g_catégorie = A) && (p_catégorie = null) alors categorie = A
    - si (g_catégorie = null) && (p_catégorie = B) alors categorie = B
    - si (g_catégorie = null) && (p_catégorie = null) alors categorie = null

    Et là vous comprenez ?

    Voici ma requête actuelle :
    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
    SELECT 
    	G.g_id, 
    	G.g_nom, 
    	GC.categorie AS g_categorie,
     
    	P.p_id, 
    	P.p_nom, 
    	PC.categorie AS p_categorie,
     
    FROM 
    	t_personne P 
    	LEFT JOIN t_groupe G ON G.id = E.id_groupe 
    	LEFT JOIN t_categorie PC ON PC.c_id = P.p_id_categorie
    	LEFT JOIN t_categorie GC ON GC.c_id = G.p_id_categorie
     
    ORDER BY 
    	GC.g_categorie ASC, 
    	G.g_nom ASC, 
     
    	PC.p_categorie ASC, 
    	P.p_nom ASC;
    Et voici ma question :
    Comment faire ?

    merci d'avance...

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Essayez ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT 
        G.g_id, 
        G.g_nom, 
        coalesce(GC.categorie,PC.categorie) AS categorie,
        P.p_id, 
        P.p_nom, 
    ...

  3. #3
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    c'est bon, j'ai fini par y arriver....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT
    	IF((NOT ISNULL(GC.categorie)) AND (NOT ISNULL(EC.categorie))
    		,GC.categorie,
    		IF(ISNULL(GC.categorie)
    			,EC.categorie,
    			IF(ISNULL(EC.categorie)
    				,GC.categorie,
    				NULL
    			)
    		)
    	) AS categorie,
    Qu'en pensez-vous ? pour moi ça fonctionne.

    @+

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Je pense que ma solution est meilleure et j'aurai aimé que vous l'essayiez.

  5. #5
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    Effectivement, COALESCE est idéal et efficace...
    tellement content d'avoir réussi tout seul avec mes IF...
    je ne pensais pas qu'il existait une solution plus simple !

    Merci beaucoup Waldar d'avoir insisté !

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    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 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    D'autant que IF n'existe pas en SQL !

    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/ * * * * *

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

Discussions similaires

  1. [AC-2007] Test sur la requête dans la base Bouquins
    Par Maba24 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 16/06/2010, 11h14
  2. Tests Fonctionnels sur requête SQL
    Par The Vandals dans le forum Langage SQL
    Réponses: 16
    Dernier message: 09/03/2010, 20h03
  3. Test VBS après requête SQL
    Par jnauche dans le forum VBScript
    Réponses: 5
    Dernier message: 22/05/2008, 11h08
  4. Test sur une requète
    Par Thibaut_Dupont dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 27/07/2006, 13h21
  5. test d'une requête avec paramètre
    Par hervé14670 dans le forum Access
    Réponses: 1
    Dernier message: 12/01/2006, 22h45

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