отображать строки в виде столбца - PullRequest
2 голосов
/ 15 июля 2010

Я хочу отображать строки в виде столбца в 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

Вот ссылка на изображение .

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

Ответы [ 3 ]

0 голосов
/ 09 августа 2012

Вот как вы можете использовать Динамический 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 с демонстрацией

0 голосов
/ 16 июля 2010

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

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

...