2012-02-26 43 views
0

這裏是我的問題的示例表:串聯/加入多行值轉換爲單列

100  IDO  0514443421 
100  IDO  0504899721 
100  IDO  0508843421 
101  LIRAN 0523399721 
101  LIRAN 0524899721 
102  ERAN 0593369721 
102  ERAN 0599999721 

我想回去一排這樣的:

100, IDO, 0514443421, 0504899721, 0508843421 

我意識到改變行號的問題。我可以解決固定的3個輸出列,其中一些可以是空的。

實現這一目標的好方法是什麼?

謝謝你提前。

+0

可能重複在MS SQL Server 2005?](http://stackoverflow.com/questions/451415/simulating-group-concat-mysql-function-in-ms-sql-server-2005) – danihp 2012-02-26 13:43:03

+0

你使用哪個數據庫? – 2012-02-26 13:47:55

回答

0

嘗試:[模擬GROUP_CONCAT MySQL的功能

;with cte as 
(select id, 
     colA, 
     colB, 
     rownumber() over (partition by id, colA order by colB) rn 
from myTable) 
select id, colA, t1.colB colB1, t2.colB colB2, t3.colB colB3 
from cte t1 
left join cte t2 on t1.id = t2.id and t1.colA = t2.colA and t2.rn = 2 
left join cte t3 on t1.id = t3.id and t1.colA = t3.colA and t3.rn = 3 
where t1.rn = 1 
+0

謝謝馬克。我認爲這種方法會爲我完成這項工作。 – 2012-02-26 20:43:11

4

假設一個最近的SQL Server,並基於極好的建議here,這將分別選擇前兩列,最後一部分作爲逗號分隔字符串;

SELECT id, ColA, 
    REPLACE(
    (SELECT ColB AS [data()] 
    FROM TableA a2 
    WHERE a1.id=a2.id 
    ORDER BY a2.ColB FOR XML PATH('')), 
    ' ', ', ') 
FROM TableA a1 
GROUP BY id, ColA; 

演示here

編輯:當然,你可以把它們當作一個字符串,如果你想,只是更換第一線

SELECT CAST(id AS VARCHAR(16)) + ', ' + ColA + ', ' + 
+0

感謝Joachim。現在我更喜歡使用基於表格的解決方案,因爲我需要將信息插入到表格中。 – 2012-02-26 20:44:06