SQL中將某個表中的多行數據在一個字段顯示
阿新 • • 發佈:2018-04-25
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>1View Code</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>
這裏數據集不是作為多行數據展示
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中將某個表中的多行數據在一個字段顯示