将行显示为列

时间:2010-07-15 17:39:25

标签: sql sql-server pivot dynamic-pivot

我想在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必须是动态可变的(它不稳定)。

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

如果不使用动态SQL,则无法做到这一点。 PIVOT要求您指定列。

让我知道动态SQL是否可以接受,我会给你一个例子。

答案 2 :(得分: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