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 :

Regrouper des colonnes dans un SELECT ?


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 144
    Points : 127
    Points
    127
    Par défaut Regrouper des colonnes dans un SELECT ?
    Hi all !

    Ma table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    id smallint NOT NULL,
    nom_générique character varying NOT NULL,
    nom_masculin character varying,
    nom_féminin character varying,
    Mes données :
    1 | célibataire | NULL | NULL
    2 | divorcé(e) | divorcé | divorcée
    3 | en couple | NULL | NULL
    4 | marié(e) | marié | mariée
    5 | séparé(e) | séparé | séparée
    6 | veuf-ve | veuf | veuve
    Vous l'aurez compris, mon but est d'afficher le profil d'un utilisateur, en considérant son genre (homme, femme ou inconnu).

    Comment faire mon SELECT si je veux par exemple tous les noms au masculin ? Je dois regrouper les colonnes nom_générique avec nom_masculin, mais comment ?

    Thank U !

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    lisez ceci : http://sqlpro.developpez.com/cours/sqlaz/select/

    Essayez une ou plusieurs solution et si vous continuez à bloquer donnez nous votre requête.

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Perso, je n'aurais pas mis NULL quand il n'y a pas de modification entre le générique, le masculin et le féminin. J'ai fait le même genre de truc sur une BDD personnelle pour les pays et le nom des nationalités :
    pay_nom, pay_nationalite_masc, pay_nationalite_fem
    France, français, française
    Russie, russe, russe

    Ainsi pas de problème de requête et je ne considère pas qu'il s'agisse de redondance mais seulement de données différentes ayant les mêmes valeurs.

    Pour en revenir à votre question, il faut utiliser COALESCE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COALESCE(nom_masculin, nom_generique) AS nom_masculin
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    Le mieux est de créer autant de vues que nécessaire :

    Noms masculins et féminins
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE VIEW V_NOM_MF
    AS
    SELECT id, 
           COALESCE(nom_masculin, nom_générique) AS NOM_MASCULIN,
           COALESCE(nom_feminin, nom_générique) AS NOM_FEMININ
    FROM   MaTable;
    Que les masculins :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE VIEW V_NOM_M
    AS
    SELECT id, 
           NOM_MASCULIN
    FROM   V_NOM_MF;
    Que les feminins :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE VIEW V_NOM_F
    AS
    SELECT id, 
           NOM_FEMININ
    FROM   V_NOM_MF;

    Au passage c'est une stupidité que de mettre des accents et autres caractères illicite dans des noms d'objets. Cela ne peut que vous conduire à de graves ennuis !!!
    A lire :
    http://sqlpro.developpez.com/cours/s...age=partie1#L1

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

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 144
    Points : 127
    Points
    127
    Par défaut
    Super ! Merci pour vos réponses (rapides).

    Problème résolu !

    SQLpro, pour répondre à ta dernière remarque : oui je suis conscient que c'est pas très portable de nommer ses objets avec des caractères accentués. Mais dans le cadre d'une application web full UTF-8 (PHP + PostgreSQL), aucun souci. Le code applicatif PHP est en français et les accents amènent une meilleure lisibilité. Mais j'ai bien conscience du problème que cela peut poser et que c'est peut-être un peu prématuré par rapport aux normes d'utiliser des accents, mais merci de l'avoir signalé.

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

Discussions similaires

  1. Regrouper des colonnes dans une classe
    Par Roger_Rabbit dans le forum JPA
    Réponses: 3
    Dernier message: 23/10/2013, 09h54
  2. traitement des colonnes dans un select
    Par dug dans le forum SQL
    Réponses: 5
    Dernier message: 26/02/2009, 22h13
  3. SQL : Regrouper des lignes dans une seule colonne
    Par manoir62 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/02/2009, 18h06
  4. Regrouper des colonnes dans une ligne
    Par aturlan dans le forum Access
    Réponses: 1
    Dernier message: 11/01/2006, 21h05
  5. Des colonnes dans un Treeview
    Par mr_langelot dans le forum Composants VCL
    Réponses: 6
    Dernier message: 28/07/2004, 09h52

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