2010-07-15 5 views
2

Je souhaite afficher les lignes en tant que colonne dans SQL Server.Afficher les lignes en tant que colonne

Ma table ressemble à ceci:

 
images_id item_id images_name 
------------------------------- 
1   1  image1.jpg 
2   1  image2.jpg 
3   1  image3.jpg 
4   2  image4.jpg 
5   2  image5.jpg 
6   2  image6.jpg 

Je voudrais cette sortie:

 
images_id item_id image1  image2  image3  
------------------------------------------------------ 
1   1  image1.jpg image2.jpg image3.jpg 
2   2  image4.jpg image5.jpg image6.jpg 

Voici un image link.

Est-ce possible ou non? item_id doit être dynamiquement modifiable (il n'est pas stable).

+0

+1: Pour être franc au sujet ayant besoin d'une requête de pivot dynamique. J'ai mis à jour les tags, vous devriez être capable de trouver de nombreux exemples pendant que vous attendez. –

+0

Voici un lien: [Utilisation de PIVOT et UNPIVOT] (http://msdn.microsoft.com/en-us/library/ms177410.aspx). Je ne sais pas si l'identifiant dynamique est facilement réalisable avec cela. – Mike

+0

@OMG Poneys: Je vois que vous avez mis l'image dans la question juste avant de la changer en texte (pour faciliter la copie + coller). L'image a l'air mieux. Vous pouvez remettre l'image si vous préférez des images. :) –

Répondre

0

Cela est impossible sans utiliser SQL dynamique. PIVOT vous oblige à spécifier les colonnes encore. Faites-moi savoir si le SQL dynamique est acceptable et je vais vous donner un exemple.

0

Voici comment vous pouvez utiliser SQL dynamique pour cela:

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME('image' + cast(row_number() over(partition by itemid order by imageid) as varchar(5))) 
      FROM test c 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query = 'SELECT itemid, ' + @cols + ' from 
      (
       select itemid, imagename, 
        ''image'' + cast(row_number() over(partition by itemid order by imageid) as varchar(5)) col 
       from test 
      ) x 
      pivot 
      (
       min(imagename) 
       for col in (' + @cols + ') 
      ) p ' 


execute(@query) 

Voir SQL Fiddle with Demo

Questions connexes