2010-07-15 2 views
2

Я хочу отображать строки как столбцы в SQL Server.отображать строки как столбец

Моя таблица выглядит следующим образом:

 
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 

Я хотел бы этот выход:

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

Вот image link.

Возможно ли это или нет? item_id должен быть динамически изменен (он нестабилен).

+0

+1: Для того авансовые о необходимости динамического запроса поворота. Я обновил теги, вы сможете найти множество примеров, пока вы ждете. –

+0

Вот ссылка: [Использование PIVOT и UNPIVOT] (http://msdn.microsoft.com/en-us/library/ms177410.aspx). Я не знаю, может ли динамический идентификатор легко справляться с этим. – Mike

+0

@OMG Ponies: Я вижу, что вы поставили изображение в вопрос, прежде чем я изменил его на текст (для удобства копирования + вставки). Изображение выглядит лучше. Вы можете вернуть изображение, если хотите изображения. :) –

ответ

0

Это не возможно без использования динамического SQL. PIVOT требует, чтобы вы все еще указывали столбцы.

Дайте мне знать, если динамический SQL является приемлемым, и я приведу вам пример.

0

Вот как вы можете использовать динамический SQL для этого:

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) 

См SQL Fiddle with Demo

Смежные вопросы