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 :

Nouvelle colonne dans commande Select


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 75
    Points : 42
    Points
    42
    Par défaut Nouvelle colonne dans commande Select
    Bonjour à tous,

    A des fins de simplification d'un code C#, j'aimerais savoir s'il est possible, et bien sûr comment, de réaliser la chose suivante :
    J'ai une table structurée comme ceci :

    QUA_ID/QUA_LAB/QUA_LANG
    1 /Test Fr / 1
    1 /Test En /2
    1 /Test De /3
    2 /Test 2 Fr /1
    2 /Test 2 En /2
    2 /Test 2 De /3
    3 /Test 3 Fr /1
    3 /Test 3 En /2
    3 /Test 3 De /3

    J'aimerais donc savoir s'il est possible, par l'intermédiaire d'une requête, d'obtenir la chose suivante :

    QUA_ID / QUA_LA1/ QUA_LA2 / QUA_LA3
    1 / Test Fr / Test En /Test De
    2 /Test 2 Fr / Test 2 En /Test 2 De
    3 /Test 3 Fr / Test 3 En /Test 3 De

    D'avance, merci à vous.

  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 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
    COSMÉTIQUE !!!

    À me lire : http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L9

    Possible bien entendu, car SQL est un langage complet au sens de Turing. Mais parfaitement stupide !

    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 du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 75
    Points : 42
    Points
    42
    Par défaut
    Ca n'est en rien du cosmétique que je veux faire.
    Il s'agit de trouver des correspondances linguistiques pour certains termes dans certaines langues, celles-ci pouvant être une fois langue 1, L'autre fois langue 3, etc..
    En c#, je vais devoir créer des dictionnaires par langue, chercher ce que je veux et ensuite parcourir tous les autres dictionnaires de langue.
    Ou pire, faire d'innombrables requêtes dans des boucles.
    Consommation mémoire et processeur totalement inutile à mon sens, alors que je pourrais utiliser un reader.

    Merci tout de même, je vais voir si j'obtiens d'autres réponses.

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Citation Envoyé par gadsweb Voir le message
    En c#, je vais devoir créer des dictionnaires par langue, chercher ce que je veux et ensuite parcourir tous les autres dictionnaires de langue.
    Ou pire, faire d'innombrables requêtes dans des boucles.
    Ou simplement faire une requête Linq sur le résultat de la requête SQL !


    Citation Envoyé par gadsweb Voir le message
    Consommation mémoire et processeur totalement inutile à mon sens, alors que je pourrais utiliser un reader.
    Un pivot (puisque c'est de ça dont il s'agit) en SQL serait effectivement de la consommation mémoire et processeur inutile... sur le serveur SQL.

    si vous tenez néanmoins à le faire, et que le nombre de langues est défini et limité, alors vous pouvez effectuer une recherche avec le mot clef PIVOT sur le forum, vous trouverez plein d'exemples, souvent accompagnés du présent débat.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 75
    Points : 42
    Points
    42
    Par défaut
    Bonjour,

    Au regard des performances des requêtes Linq par rapport à SQL, cette solution est à éviter. Autant faire les requêtes sous SQL à mon sens.
    Et pour la 2ème partie, ben non le nombre de langues n'est pas défini ni limité :-(

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par gadsweb Voir le message
    Au regard des performances des requêtes Linq par rapport à SQL, cette solution est à éviter. Autant faire les requêtes sous SQL à mon sens.
    Je crois qu'on s'est mal compris : je ne parle pas de requête linqToSql pour attaquer la base de données ( je ne vous dirai pas ce que j'en pense ), mais d'utiliser linq pour manipuler le résultat de votre requete SQL, afin d'effectuer le pivot. ça remplacera avantageusement vos boucles imbriquées dans tous les sens farcies de résultats intermédiaires.

    Citation Envoyé par gadsweb Voir le message
    Et pour la 2ème partie, ben non le nombre de langues n'est pas défini ni limité :-(
    Alors, combien aurez vous de colonnes dans le résultat ??????????

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Points : 502
    Points
    502
    Par défaut
    Voilà.

    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
    DECLARE @TEST TABLE (QUA_ID int, QUA_LAB varchar(50), QUA_LANG int)
     
    INSERT INTO @TEST SELECT 1 ,'Test Fr',1
    INSERT INTO @TEST SELECT 1 ,'Test En',2
    INSERT INTO @TEST SELECT 1 ,'Test De',3
    INSERT INTO @TEST SELECT 2 ,'Test 2 Fr ',1
    INSERT INTO @TEST SELECT 2 ,'Test 2 En ',2
    INSERT INTO @TEST SELECT 2 ,'Test 2 De ',3
    INSERT INTO @TEST SELECT 3 ,'Test 3 Fr ',1
    INSERT INTO @TEST SELECT 3 ,'Test 3 En ',2
    INSERT INTO @TEST SELECT 3 ,'Test 3 De ',3
     
    SELECT QUA_ID, [1] AS QUA_LA1, [2] AS QUA_LA2, [3] AS QUA_LA3
    FROM 
    (
    SELECT QUA_LAB, QUA_LANG, QUA_ID FROM @TEST
    ) As SourceTable
    PIVOT
    (
    MAX(QUA_LAB) FOR QUA_LANG IN ([1], [2], [3])
    ) AS PIvotTable
    Résultat:

    QUA_ID QUA_LA1 QUA_LA2 QUA_LA3
    1 Test Fr Test En Test De
    2 Test 2 Fr Test 2 En Test 2 De
    3 Test 3 Fr Test 3 En Test 3 De

  8. #8
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Alors, combien aurez vous de colonnes dans le résultat ??????????
    QFT. Une requête pivot n'est pas maintenable si le nombre de langues est variable.
    Est-ce que le plus simple n'est pas de faire un dictionnaire :
    Dictionary<int, Dictionary < String , String > > ?
    Pour une clé donnée il n'y a plus qu'à parcourir le dictionnaire langue -> traduction.

Discussions similaires

  1. Créer une nouvelle colonne dans le SELECT statement
    Par Pavel_47 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/09/2011, 16h10
  2. operation conditionnelle sur colonne dans un select
    Par Monstros Velu dans le forum Langage SQL
    Réponses: 5
    Dernier message: 05/12/2006, 11h31
  3. ajouter une nouvelle colonne par un SELECT
    Par maysa dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/09/2006, 13h14
  4. Réponses: 5
    Dernier message: 16/06/2006, 21h16
  5. Debutant SQL : Comment inserer une nouvelle colonne dans une
    Par cquadjul dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/07/2005, 21h34

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