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

Langage SQL Discussion :

[SQL]SQL Server 2008 - concaténation de colonne


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 205
    Par défaut [SQL]SQL Server 2008 - concaténation de colonne
    Bonjour,

    j'ai un petit soucis de concaténation, j'utilise SQL Server 2008
    voici ma vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT dbo.PRG_HC.HC_ID, dbo.T_ARBO_PRG.PRG_NAME, dbo.PRG_HC.HC_ANUM, LTRIM(dbo.T_ARBO_PRG.PRG_ROOT + dbo.PRG_HC.HC_ANUM) 
                          AS [HC CODE], dbo.T_ARBO_PRG.PRG_LEVEL
    FROM dbo.PRG_HC 
    INNER JOIN dbo.T_ARBO_PRG ON dbo.PRG_HC.PRG_ID = dbo.T_ARBO_PRG.PRG_ID 
    INNER JOIN dbo.HC ON dbo.HC.HC_ID = dbo.PRG_HC.HC_ID
    HC_ID est retourné plusieurs fois et la colonne alias HC CODE possède les différentes appellations de mon HC_ID.
    Je voudrais concaténer les HC_CODE pour avoir des unique HC_ID et avoir la colonne HC CODE qui possède toutes les appellations..

    c'est pour un affichage utilisateur. car en application la concaténation prend trop de temps... il y a 532 HC et et une 10zaine d'appellations par HC

    J'espère avoir été assez clair

  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
    22 010
    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 : 22 010
    Billets dans le blog
    6
    Par défaut
    Utilisez une requête récursive comme celle que j'ai donné dans mon cours ici :
    http://sqlpro.developpez.com/cours/s...ursives/#LIV-D

    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 éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 205
    Par défaut
    J'essaye mais j'y arrive pas

    pouvez vous me dire comment ça fonctionne..
    Dans mon cas ma table n'a pas de position
    Du coup ça boucle à l'infini...

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    WITH
    phrases (phrase, id)
    AS
    (
    SELECT CAST(T_ARBO_PRG.PRG_ROOT + PRG_HC.HC_ANUM AS VARCHAR(max))
          + CASE
               WHEN SUBSTRING(T_ARBO_PRG.PRG_ROOT + PRG_HC.HC_ANUM, LEN(T_ARBO_PRG.PRG_ROOT + PRG_HC.HC_ANUM), 1) = '''' THEN ''
               ELSE ' '
            END, HC.HC_ID
    FROM   PRG_HC INNER JOIN
                          T_ARBO_PRG ON PRG_HC.PRG_ID = T_ARBO_PRG.PRG_ID INNER JOIN
                          HC ON HC.HC_ID = PRG_HC.HC_ID
    UNION ALL
    SELECT phrase + CAST(T_ARBO_PRG.PRG_ROOT + PH.HC_ANUM AS VARCHAR(max))
                 + CASE
                      WHEN SUBSTRING(T_ARBO_PRG.PRG_ROOT + PH.HC_ANUM, LEN(T_ARBO_PRG.PRG_ROOT + PH.HC_ANUM), 1) = '''' THEN ''
                      ELSE ' '
                   END AS PHRASE,
          suiv.HC_ID
    FROM   HC AS suiv
          INNER JOIN phrases
                ON suiv.HC_ID = phrases.id
          INNER JOIN PRG_HC PH ON suiv.HC_ID=PH.HC_ID 
          INNER JOIN T_ARBO_PRG ON PH.PRG_ID = T_ARBO_PRG.PRG_ID 
    ),
    maxphrase
    AS
    (
    SELECT id, MAX(id) AS maxposition
    FROM   phrases
    GROUP  BY id
    )
    SELECT id, RTRIM(phrase) + '.' AS PHRASE
    FROM   phrases
    ORDER  BY id

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    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 : 22 010
    Billets dans le blog
    6
    Par défaut
    Si vous n'avez pas de clef dans votre table... C'est pas une table c'est un fichier Cobol.

    Commencez par le commencement en définissant la clef de votre table.

    Accessoirement respecter la charte de postage. http://www.developpez.net/forums/a69...gage-sql-lire/
    On ne peut pas deviner la structure de votre table !

    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/ * * * * *

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 205
    Par défaut
    Oui excusez moi voici les tables qui ont des clées

    T_ARBO_PRG: PRG_ID,PRG_NAME,PRG_BD,PRG_BG,PRG_LEVEL,PRG_ROOT,PRG_LEN

    HC : HC_ID, ...

    PRG_HC : PRG_ID, HC_ID, HC_ANUM

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE TABLE [dbo].[T_ARBO_PRG](
    	[PRG_ID] [int] IDENTITY(1,1) NOT NULL,
    	[PRG_NAME] [varchar](32) NOT NULL,
    	[PRG_BD] [int] NOT NULL,
    	[PRG_BG] [int] NOT NULL,
    	[PRG_LEVEL] [int] NOT NULL,
    	[PRG_ROOT] [varchar](32) NULL,
    	[PRG_LEN] [int] NOT NULL,
     CONSTRAINT [PK_PRG_ID] PRIMARY KEY CLUSTERED 
    (
    	[PRG_ID] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE [dbo].[PRG_HC](
    	[PRG_ID] [int] NOT NULL,
    	[HC_ID] [int] NOT NULL,
    	[HC_ANUM] [varchar](20) NULL,
     CONSTRAINT [PK_PRG_HC] PRIMARY KEY CLUSTERED 
    (
    	[PRG_ID] ASC,
    	[HC_ID] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO

    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
    CREATE TABLE [dbo].[HC](
    	[HC_ID] [int] IDENTITY(1,1) NOT NULL,
    	[date_saisie] [datetime] NOT NULL,
    	[PRG_ID] [int] NULL,
    	[launching] [int] NULL,
    	[version] [nchar](3) NULL,
    	[engine] [nchar](10) NULL,
    	[config] [varchar](10) NULL,
    	[newRule] [nchar](7) NULL,
     CONSTRAINT [PK_HC_ID] PRIMARY KEY CLUSTERED 
    (
    	[HC_ID] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    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 : 22 010
    Billets dans le blog
    6
    Par défaut
    Un petit jeu d'essais avec le résultat attendu ferais pas de mal....

    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/ * * * * *

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

Discussions similaires

  1. SQL Server 2008 : les nouveautés . . .
    Par SQLpro dans le forum MS SQL Server
    Réponses: 51
    Dernier message: 12/05/2010, 16h10
  2. [MS SQL Server] connaitre grandeur des colonnes
    Par Husqvarna dans le forum Langage SQL
    Réponses: 4
    Dernier message: 03/11/2006, 09h49
  3. [SQL Server 2005] Recherche sur colonne "Image"
    Par frechy dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 01/09/2006, 18h35
  4. [SQL Server 2000] ajouter une colonne identité dans une vue?
    Par CetTer dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 02/08/2005, 13h43

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