Transposer 1 lignes/ncolonnes en n lignes/2colonnes

sybess Messages postés 1 Date d'inscription mardi 31 mars 2009 Statut Membre Dernière intervention 31 mars 2009 - 31 mars 2009 à 17:47
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 - 7 août 2011 à 17:15
Bonjour,

J'aimerai transformer une ligne de plusieurs colonnes en n lignes composées du nom de la colonne avec la valeur associée.
En bref passé de :
colonnes   A   B   C   D
valeur        a    b    c   d

en:
colonnes    valeur
A               a
B               b  
C               c
D               d

Merci pour votre aide.

2 réponses

chloett Messages postés 1 Date d'inscription mardi 28 septembre 2010 Statut Membre Dernière intervention 4 août 2011
4 août 2011 à 16:41
+1, Je voudrais bien savoir aussi
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
7 août 2011 à 17:15
Bonjour

En créant une requette à la volée, par l'utilisation d'un cursor
ça a ses limitations, mais dans certains cas ça peut aider.

DECLARE @ColumnName NVARCHAR(128)
DECLARE @Query NVARCHAR(4000)

--on recherche le nom des colonnes de la tables test1 via un cursor pour faire un itération
DECLARE mon_Cursor CURSOR FOR
SELECT  syscolumns.name AS [COLUMN] FROM  syscolumns INNER JOIN sysobjects ON syscolumns.id = sysobjects.id WHERE (sysobjects.name = N'test1')

OPEN mon_Cursor

-- dans l'itération, on va construire une requette
FETCH NEXT FROM mon_Cursor INTO @ColumnName
-- au début la requette consiste en : le nom de la premiere colonne et la colonne ex: select 'A' as [column], A from test1
set @Query=   ('select ''' + @ColumnName + ''' AS [COLUMN], '+@ColumnName+' AS [Value] from test1')

-- pour les itérations suivante, on concatene la meme requette, mais sur les autres colonnes, avec une clause UNION ALL
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM mon_Cursor INTO @ColumnName
set @Query = @Query + ' Union all select ''' + @ColumnName + ''' AS [COLUMN], '+@ColumnName+' AS [Value] from test1'
END
CLOSE mon_Cursor
DEALLOCATE mon_Cursor
-- il ne reste plus qu'à executer le requette
exec  (@query)



Bob.
C# is amazing, enjoy it!
0
Rejoignez-nous