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 :

Concaténer des lignes d'enregistrements dans une colonne


Sujet :

MS SQL Server

  1. #1
    Membre régulier Avatar de dany13
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Points : 100
    Points
    100
    Par défaut Concaténer des lignes d'enregistrements dans une colonne
    Bonjour,
    ce que je veux faire est a peu pret la meme chose que le lien ci contre :
    http://access.developpez.com/sources/?page=Requete
    Sauf que je suis sous MS-sql server.
    Est ce possible?
    Et si oui, a quel endroit dois je mettre cette fonction :

    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
     
    Pour cela, il vous faut placer ce code dans un module :
     
    Public Function RecupParticipant(Projet As Long) As String
    Dim res As DAO.Recordset
    Dim SQL As String
    'Selectionne les participant du projet
    SQL = "SELECT NomParticipant FROM Tbl_Projet WHERE Projet=" & Projet
    Set res = CurrentDb.OpenRecordset(SQL)
    'Concatene les différents enregistrement
    While Not res.EOF
    RecupParticipant = RecupParticipant & res.Fields(0).Value & " "
    res.MoveNext
    Wend
    'Enleve le dernier espace
    RecupParticipant = Left(RecupParticipant, Len(RecupParticipant) - 1)
    'libere la mémoire
    Set res = Nothing
    End Function
    Merci pour votre aide
    Carpe Diem : Profitez du moment présent
    La connaissance non partagée n'a pas vraiment son utilité

  2. #2
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Vous devez poster votre méssage sur le forum VB.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  3. #3
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut Re: Concaténer des lignes d'enregistrements dans une colonne
    Citation Envoyé par dany13
    Sauf que je suis sous MS-sql server.
    Est ce possible?
    Oui, c'est le même code, à partir du moment ou la requête SQL est valide sous ton SGBD.

    Citation Envoyé par dany13
    Et si oui, a quel endroit dois je mettre cette fonction
    Dans un module de ton projet VB, elle est déclarée en Public.
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  4. #4
    Membre régulier Avatar de dany13
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Points : 100
    Points
    100
    Par défaut Bdd :concaténer des lignes d'enregistrements dans 1 colonne?
    Merci de votre réponse mais ce n'est pas tout a fait ce que je cherche.
    Ma question est de savoir si c possible de creer une fonction sous sql server et de pouvoir l'utiliser dans mes vues afin de regrouper plusieurs lignes d'enregistrements dans une colonne, champ d'une table?
    Exemple :
    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
    22
    23
    24
    25
     
     
    table PERSON                   table COULEURS
    ID_PERSON   | NOM          ID_COULEURS  |INTITULE 
    --------------   ----------      -----------------   ------------
    001               DUPOND      250                   BLEU
    002               MARTIN       300                   JAUNE
    003               DUPUIS       500                   VERT
     
    table PERSON_COULEUR
    ID_PERSON | ID_COULEURS
    --------------   -----------------
    001               300
    001               500
    002               250
    002               300
    002               500
    003               250
     
    Et voici la vue que je souhaiterai mettre en place :
    ID_PERSONS      COULEURS
    ---------------      --------------
    001                    JAUNE, VERT
    002                    BLEU, JAUNE, VERT
    003                    BLEU
    Est ce que je peux creer une fonction, procedure ou autre dans sql server afin d'y faire appel dans ma vue qui me donnerait donc ce resultat ci dessus?

    Merci de votre aide
    Carpe Diem : Profitez du moment présent
    La connaissance non partagée n'a pas vraiment son utilité

  5. #5
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut Re: Bdd :concaténer des lignes d'enregistrements dans 1 colo
    Citation Envoyé par dany13
    Est ce que je peux creer une fonction, procedure ou autre dans sql server afin d'y faire appel dans ma vue qui me donnerait donc ce resultat ci dessus?
    Oui, tu peux. Comme tu n'avais pas assez détaillé sur ton premier post, WOLO Laurent a pensé que tu avais un problème VB, alors que c'est bien un problème SQL Server ... Il faut que tu repostes là-bas si tu souhaites une solution
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  6. #6
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Vous devez bien poser vos questions.
    Je vous rebascule sur le forum SQL Serveur.

    Nous allons commencer par creer la fonction.

    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
    CREATE FUNCTION FN_ConcatCouleur 
    (
                    @PER_ID AS INTEGER
    ) RETURN VARCHAR(8000)
    BEGIN 
    DECLARE @TEMP VARCHAR(8000)
    SET @TEMP=''
    SELECT @TEMP=@TEMP + ','  + INTITULE
    FROM PERSON_COULEURS P JOIN COULEURS C
                             ON P.ID_COULEURS=C.ID_COULEURS
    WHERE ID_PERSONS=@PER_ID
     
    IF RIGHT(@TEMP,1)=','    SET @TEMP=LEFT(@TEMP,LEN(@TEMP)-1)
     
    RETURNS @TEMP
    END
    Et il vous reste à creer votre vue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE V_PERSON_COULEUR
    AS 
    SELECT  PERSON_ID,DBO.FN_ConcatCouleur(PERSON_ID) AS COULEURS
    FROM (
              SELECT PERSON_ID
              FROM PERSON
            )
    Je n'ai pas eu le temps de tester mais vous pouvez tester et je crois que ca va marcher parfaitement.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  7. #7
    Membre régulier Avatar de dany13
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Points : 100
    Points
    100
    Par défaut
    Merci de votre réactivité, je vais mettre ça en place de ce pas.
    Désolée de m'etre trompée de catégorie...

    Je vous donne des nouvelles bientot!!
    Carpe Diem : Profitez du moment présent
    La connaissance non partagée n'a pas vraiment son utilité

  8. #8
    Membre régulier Avatar de dany13
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Points : 100
    Points
    100
    Par défaut Erreur de syntaxe
    Bonjour,
    je suis en train de creer la fonction que vous m'avez indiqué, cependant j'ai une erreur de syntaxe que je n'arrive malheureusement pas a résoudre...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Erreur 156 : Syntaxe incorrect vers le mot clé 'RETURN'.
    'VARCHAR' n'est pas un nom de fonction reconnu.
    Ligne 15 : syntaxe incorrect vers 'RETURNS'.
    Que dois je modifier pour que la fonction passe?
    Merci
    Carpe Diem : Profitez du moment présent
    La connaissance non partagée n'a pas vraiment son utilité

  9. #9
    Membre régulier Avatar de dany13
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Points : 100
    Points
    100
    Par défaut Correction de mon erreur ;)
    C'est bon, j'ai pu corriger mes betises, voici la bonne syntaxe :
    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
     
    CREATE FUNCTION FN_ListeConditionsSelection (@PER_ID int) 
    	RETURNS  varchar(500)
    AS
    BEGIN 
    	DECLARE @TEMP  varchar(500)
    	SET @TEMP='' 
    	SELECT @TEMP=@TEMP + ','  + LIB_CONDITIONS_SELECTION 
    	FROM ACTIONS_CONDITIONS_SELECTION A JOIN CONDITIONS_SELECTION C 
                             ON A.ID_CONDITIONS_SELECTION=C.ID_CONDITIONS_SELECTION 
    	WHERE ID_ACTIONS_FORMATION=@PER_ID 
     
    	IF RIGHT(@TEMP,1)=','    SET @TEMP=LEFT(@TEMP,LEN(@TEMP)-1) 
     
    	RETURN @TEMP 
    END
    Je vous tiens au courant apres mes tests!!
    Carpe Diem : Profitez du moment présent
    La connaissance non partagée n'a pas vraiment son utilité

  10. #10
    Membre régulier Avatar de dany13
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Points : 100
    Points
    100
    Par défaut
    ça fonctionne impeccable!!
    J'ai juste corrigé le probleme de la virgule qui se trouve mal placé dans le code et me donner des trucs du genre ',BLEU,VERT' .

    Merci beaucoup a tous.
    Bonne journée.
    Carpe Diem : Profitez du moment présent
    La connaissance non partagée n'a pas vraiment son utilité

  11. #11
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Vous voyez que lors que vous prenez le temps de composer votre question, vous avez plus de chance de trouver des réponse et dans les delais raisonnable.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

+ 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. Réponses: 22
    Dernier message: 22/05/2013, 17h52
  3. Récupérer des lignes non enregistrées dans une table
    Par leddy dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/04/2008, 15h09
  4. Réponses: 1
    Dernier message: 08/03/2007, 12h35
  5. Comment mettre des lignes de couleur dans une TCheckListBox ?
    Par Isa31 dans le forum Composants VCL
    Réponses: 9
    Dernier message: 31/03/2005, 08h40

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