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


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

比如表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 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM