2

我想在 SQL Server 中将行显示为列。

我的表如下所示:

images_id item_id images_name
-------------------------------------------
1 1 图像1.jpg
2 1 图像2.jpg
3 1 图像3.jpg
4 2 图像4.jpg
5 2 图像5.jpg
6 2 图像6.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 必须是动态可变的(不稳定)。

4

3 回答 3

0

如果不使用动态 SQL,这是不可能的。PIVOT 要求您仍然指定列。

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

于 2010-07-15T22:11:18.703 回答
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

于 2012-08-09T14:40:33.033 回答