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 :

Concaténation de lignes


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Par défaut Concaténation de lignes
    Bonjour,

    avant d'exposer mon problème, voici la tête de ma base de données et mon besoin (enfin celui de mon client)
    J'ai une table Component qui contient un identifiant.
    Cette table est liée (entres autres) à une table de contact IT (ContactIT) et une table de contacts BO (ContactBO) via l'identifiant de mon component nommé CartoEntry.

    Ce que j'aimerais c'est obtenir pour chaque component la liste des contacts IT dans une colonne et la liste des contacts BO dans une autre colonne (peu importe le format)

    Le but est d'éviter de devoir ramener x lignes pour un component et de devoir faire une boucle ensuite dans mon code C#.

    J'ai vu qu'il existait la fonction stuff avec for xml path mais malheureusement je ne peux pas m'appuyer dessus car Entity Framework ne le supporte pas (le for xml path).
    Je me demandais donc s'il existait un moyen de faire cela sans le stuff.

    Auriez-vous une idée ?
    Voici un exemple de requête :
    Code sql : 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    SELECT DISTINCT TCD.CartoEntry_Key AS CartoEntryId ,
      TCD.CartoEntry                   AS Code ,
      TCD.CartoEntry_CodBasicat        AS CartoEntryBasicat ,
      CASE
        WHEN TRS.Label_FR IS NULL
        THEN TRS.Label_EN
        ELSE TRS.Label_FR
      END                                 AS CartoEntryStatus,
      TCD.CartoEntry_Object_Type          AS CartoEntryObjectType ,
      TCD.CartoEntry_Origin               AS CartoEntryOrigin ,
      TRMD.Manager_Development_Department AS DevelopmentOrganizationOrganization ,
      TRBOD.BO_Department_Department      AS MainBusinessOwnerOrganization
      ,stuff((select tlcc.Contact_First_Name+' '+tlcc.Contact_Last_Name+','+tlcc.Contact_Email+','+tlcc.Contact_Department+','+tlcc.Contact_Role+','+trcr.Role_EN+';' from 
    							 T_Link_CartoEntry_Contact as tlcc inner join T_Ref_Contact_Role  as trcr on tlcc.Contact_Role=trcr.Contact_Role
    						where tlcc.CartoEntry = TCD.CartoEntry and trcr.ShowInSummary=1 
    						order by tlcc.Contact_Last_Name, tlcc.Contact_First_Name for xml path('')),1,0,'') as ContactsIt
      ,stuff((select tlccbo.Contact_Business_Owner_First_Name+' '+tlccbo.Contact_Business_Owner_Last_Name+','+tlccbo.Contact_Business_Owner_Email+','+tlccbo.Contact_Business_Owner_Department+','+tlccbo.Contact_Business_Owner_Role+','+trbor.Label_EN+';' from 
    							 T_Link_CartoEntry_Contact_Business_Owner as tlccbo inner join T_Ref_Business_Owner_Role as trbor on tlccbo.Contact_Business_Owner_Role=trbor.Business_Owner_Role
    						where tlccbo.CartoEntry = TCD.CartoEntry and trbor.ShowInSummary=1
    						order by tlccbo.Contact_Business_Owner_Last_Name, tlccbo.Contact_Business_Owner_First_Name for xml path('')),1,0,'') as ContactsBo
    FROM T_CartoEntry_Description         AS TCD
    INNER JOIN T_CartoEntry_Organization  AS TCO
    ON TCD.CartoEntry=TCO.CartoEntry
    LEFT OUTER JOIN t_ref_business_subdomain AS TRBS
    ON TCD.cartoentry_business_subdomain=TRBS.Business_subdomain
    AND TCD.cartoentry_business_domain  =TRBS.Business_domain
    LEFT OUTER JOIN t_ref_business_domain AS TRBD
    ON TRBS.business_domain=TRBD.Business_domain
    LEFT OUTER JOIN T_REF_Status AS TRS
    ON TCD.CartoEntry_Status = TRS.status
    LEFT OUTER JOIN T_Ref_Business_Owner_Department AS TRBOD
    ON TCO.CartoEntry_BO_Department = TRBOD.BO_Department_Email
    LEFT OUTER JOIN T_Ref_Manager_Development AS TRMD
    ON TCO.CartoEntry_Manager_Development = TRMD.Manager_Development_Email
    left outer join T_Link_CartoEntry_Contact as TLCC on TLCC.CartoEntry = TCD.CartoEntry
    WHERE TCD.CartoEntry_Status NOT LIKE 'Workspace'
    AND (TCD.CartoEntry_Status = 'Development'
    OR TCD.CartoEntry_Status   = 'Think'
    OR TCD.CartoEntry_Status   = 'Production')
    AND ((TCD.CartoEntry_ShortDesc_English LIKE '%carto%')
    OR (TCD.CartoEntry_ShortDesc_French LIKE '%carto%')
    OR (TCD.CartoEntry_LongDesc_English LIKE '%carto%')
    OR (TCD.CartoEntry_LongDesc_French LIKE '%carto%'))
    ORDER BY Code

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Bonjour,

    en MySQL il y a le group_concat, et en Postgre SQL un équivalent, je ne sais pas si il y a quelque chose du même genre en SQL Server, mais ça pourrait surement vous aider.
    Dans le cas contraire, il faudrait peut être vous faire une fonction qui liste les Contacts IT et une fonctions qui liste les contacts BO, et avec un curseur faire un concat ...
    Ensuite dans votre requête SQL vous appelleriez vos fonctions.

  3. #3
    Membre Expert
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Par défaut
    J'ai bien vu qu'il y avait des équivalent dans d'autres bases.
    J'ai finalement fait une vue qui liste mes contacts.

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

Discussions similaires

  1. Concaténer en ligne les données d'une colonne
    Par philben dans le forum Contribuez
    Réponses: 2
    Dernier message: 16/02/2015, 12h23
  2. Concaténer des lignes
    Par Wisefool dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 26/02/2008, 16h25
  3. Concaténation de ligne en SQL
    Par GLSpirit dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 08/10/2007, 11h09
  4. [VBA DAO] Concatèner deux lignes
    Par rayni88 dans le forum VBA Access
    Réponses: 12
    Dernier message: 18/07/2007, 11h18
  5. Concaténer des lignes d'enregistrements dans une colonne
    Par dany13 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 08/07/2005, 21h56

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