1. 程式人生 > >SQL中將某個表中的多行數據在一個字段顯示

SQL中將某個表中的多行數據在一個字段顯示

ack 查詢 style 顯示 isp dex OS AC for

項目需求:將某個表中的多行數據在一個字段顯示,如下:

比如表A中有字段 ID,NAME,

表B中有字段ID,PID,DES,

表A,表B中的數據分別如下:

ID NAME
1 張三
2 李四

ID PID DES
1 1 語文
2 1 數學
3 1 外語
4 2 歷史
5 2 地理

最終我想顯示的效果為:

ID NAME KC
1 張三 語文,數學,外語
2 李四 歷史,地理

方法:使用sql中的STUFF函數與for xml path

1.for xml path是將將查詢結果集以XML形式展現

比如對於表B,select * from b for xml path(‘‘)

得到的結果集如下:

技術分享圖片
<ID>1
</ID> <PID>1</PID> <DES>語文</DES> <ID>2</ID> <PID>1</PID> <DES>數學</DES> <ID>3</ID> <PID>1</PID> <DES>外語</DES> <ID>4</ID> <PID>2</PID> <DES>歷史</DES> <ID>5</ID> <PID>2
</PID> <DES>地理</DES>
View Code

這裏數據集不是作為多行數據展示

2.stuff函數的用法為:stuff(param1, startIndex, length, param2)
說明:將param1中自startIndex(SQL中都是從1開始,而非0)起,刪除length個字符,然後用param2替換刪掉的字符。

因此,將多行數據轉換為一行的格式寫法為:

select ID as ID,Name as NAME,
(select stuff((select ‘,‘+DES from b where b.PID=a.ID for xml path(‘‘)),1,1,‘‘)) as KC
from a 

SQL中將某個表中的多行數據在一個字段顯示