2014-02-06 22 views
0

我有輸出如下選擇查詢:Microsoft sql server:樞軸行連接在一起?

pid-------Name------------------response 
147------Factory Influenced-----Fish Paste 
147------Factory Influenced-----Contract Packer 
147------Factory Influenced-----Cereals 
147------Factory Influenced-----Biscuits 
154------Factory Influenced-----Werda 
154------Factory Influenced-----Worcester 
158------Factory Influenced-----Moirs 
158------Factory Influenced-----Oats 
158------Factory Influenced-----Noogy 
157------Factory Influenced-----Safari Nuts 
158------Factory Influenced-----Savoury Foods 

我想這樣做的就是「工廠影響下」一欄和「響應」的字段。不過,我想連接這些值如下:

pid-----Factory Influenced   
147-----Fish Paste, Contract Packer, Cereals, Biscuits   
154-----Werda, Worcester    
158-----Moirs, Oats, Noogy, Safari Nuts, Savoury Foods 

任何幫助,將不勝感激。

回答

4

將多行連接到一個列中的過程不是PIVOT,當您將數據行轉換爲列時,PIVOT是一個PIVOT。既然你想創建一個逗號分隔的值列表,代碼是不同的。

您可以使用FOR XML PATHSTUFF創建列表:

select t1.pid, 
    t1.name, 
    STUFF(
     (SELECT ', ' + t2.response 
      FROM yourtable t2 
      where t1.pid = t2.pid 
      FOR XML PATH ('')) 
      , 1, 1, '') AS response 
from yourtable t1 
group by t1.pid, t1.name; 

SQL Fiddle with Demo

或者你可以使用CROSS APPLYFOR XML PATH

select DISTINCT t1.pid, 
    t1.name, 
    response = left(t2.response, len(t2.response)-1) 
from yourtable t1 
cross apply 
(
    select t2.response + ', ' 
    from yourtable t2 
    where t1.pid = t2.pid 
    FOR XML PATH('') 
) t2 (response); 

SQL Fiddle with Demo。兩個版本都會給出結果:

| PID |    NAME |          RESPONSE | 
|-----|--------------------|------------------------------------------------| 
| 147 | Factory Influenced | Fish Paste, Contract Packer, Cereals, Biscuits | 
| 154 | Factory Influenced |        Werda, Worcester | 
| 157 | Factory Influenced |         Safari Nuts | 
| 158 | Factory Influenced |    Moirs, Oats, Noogy, Savoury Foods | 
+0

thanks @bluefeet。設法改變這個返回正是我想要的如上。欣賞它。 – user3278802