Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/12/2010, 09h03   #1
Membre régulier
 
Inscription : mai 2007
Messages : 144
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 144
Points : 78
Points : 78
Par défaut Regrouper des colonnes dans un SELECT ?

Hi all !

Ma table :
Code :
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 :
Citation:
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 !
Evocatii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 09h16   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
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.
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 09h17   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 977
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 977
Points : 18 221
Points : 18 221
Envoyer un message via MSN à CinePhil
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 :
SELECT COALESCE(nom_masculin, nom_generique) AS nom_masculin
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 09h19   #4
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 766
Points : 17 766
Le mieux est de créer autant de vues que nécessaire :

Noms masculins et féminins
Code :
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 :
1
2
3
4
5
CREATE VIEW V_NOM_M
AS
SELECT id, 
       NOM_MASCULIN
FROM   V_NOM_MF;
Que les feminins :
Code :
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
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 11h30   #5
Membre régulier
 
Inscription : mai 2007
Messages : 144
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 144
Points : 78
Points : 78
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é.
Evocatii est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h23.


 
 
 
 
Partenaires

Hébergement Web