2010-07-15 73 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:對於前期是需要有關動態支點查詢。我更新了標籤,你應該可以在等待的時候找到大量的例子。 – 2010-07-15 17:42:59

+0

這是鏈接:[使用PIVOT和UNPIVOT](http://msdn.microsoft.com/en-us/library/ms177410.aspx)。我不知道這個動態ID是否可以輕鬆實現。 – Mike 2010-07-15 17:46:13

+0

@OMG小馬:在我將它改爲文本之前,我看到你將圖像放入問題中(爲了便於複製+粘貼)。圖像看起來更好。如果你喜歡圖像,你可以放回圖像。 :) – 2010-07-15 17:47:01

回答

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