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

MS SQL Server Discussion :

Petite question de "concaténation"


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 81
    Par défaut Petite question de "concaténation"
    Bonjour,

    Je ne sais pas si le terme de concaténation est le bon, mais il ne m'en est pas venu d'autre à l'esprit
    Voilà, j'ai un petit problème tout bête qui se résume ainsi:

    J'ai une table contenant diverses informations sur des clients (contact).
    Celle-ci se représente ainsi:

    SH_reference SH_NAME SH_RFO Surname First_Name
    486595841 xxxx VE aaa ddd
    486595841 xxxx VE bbb eee
    486595841 xxxx VE ccc fff

    Un même client peut avoir un ou plusieurs contacts ayant des rangs différents dans la société ( Direction, associé, etc ).

    Je dois créer une vue donnant le résultat en indiquant le nom et le prénom de chaque contact sur une seule ligne (Nom1, Prénom1, Nom2,Prénom2, ..., Nom5, Prénom5) une limite étant fixée à 5 Contacts possibles (voir fichier XLS joint)

    J'ai tenté avec du COALESCE mais je pense que ce n'est pas la bonne approche.
    Sachant que je ne peux pas créer de fonction, je vais devoir certainement travailler avec des tables temporaires.

    Auriez-vous une idée de la meilleure approche? Je vous remercie par avance de votre aide précieuse
    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 240
    Par défaut
    On peut faire cela avec une table mémoire, mais un SGBDR n'est pas fait pour la cosmétique. L'affichage devrait être réalisé côté client.

  3. #3
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 81
    Par défaut
    Bonjour,

    Justement le problème est là, c'est que le frontend est Access qui jusque maintenant utilisait des tables liées d'un AS400.
    Celui-ci devant être "supprimé", il m'est maintenant demandé de créer les Vues sur lesquelles le Frontend pourrait être lié.

    Je suis moi même convaincu que ce n'est pas la meilleure approche, mais n'ayant pas le temps de refaire le design du Frontend, il ne me reste que malheureusement l'approche des Views

    Aurais-tu éventuellement un exemple de comment je pourrais gérer cela avec du T-SQL?

    Encore merci

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 240
    Par défaut
    Je présume que tu disposes d'une table client et contact. Un client pouvant disposer de n contacts.

    La première chose à réaliser est une fonction table. Cette fonction recevra un paramètre qui est l'ID du client. Le paramètre de retour sera un varchar contenant la liste des noms des 5 premiers contacts.

    La vue sera du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT co.IDClient, ct.Contact
    FROM Client co
       CROSS APPLY MaFonctionTable(co.IDClient) ct

  5. #5
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT nom + ','
    FROM Client 
    FOR XML PATH('')
    mais c'est vraiment pas terrible...

  6. #6
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Tu as le choix des méthodes de concaténation :

    CTE récursive, XML ou autre.

    Tu peux nous donner un peu plus de précision sur tes tables concernées (schéma + indexes) et une idée de la volumétrie.

    ++

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

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