我想在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 :(得分:2)
Cross Tabs and Pivots, Part 1 – Converting Rows to Columns
答案 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)