sql?server多行數(shù)據(jù)合并一行顯示簡單實現(xiàn)代碼
在 SQL Server 中,可以使用 STUFF 和 FOR XML PATH 進行多行合并成一行。例如,假設(shè)有一個表名為 orders ,其中包含訂單號和產(chǎn)品名稱:
order_id | product_name |
---|---|
1 | Product A |
1 | Product B |
2 | Product C |
2 | Product D |
以下查詢將在 order_id 列上分組,將產(chǎn)品名稱合并成一行:
SELECT order_id, STUFF((SELECT ', ' + product_name FROM orders o2 WHERE o2.order_id = o1.order_id FOR XML PATH('')), 1, 2, '') AS products FROM orders o1 GROUP BY order_id
結(jié)果如下所示:
order_id | products |
---|---|
1 | Product A, Product B |
2 | Product C, Product D |
在STUFF函數(shù)中,第一個參數(shù)指定要插入的位置,第二個參數(shù)指定要從第一個參數(shù)指定的位置開始刪除的字符數(shù),第三個參數(shù)指定要插入的新值。在此查詢中,使用 FOR XML PATH 將每個產(chǎn)品名稱轉(zhuǎn)換為逗號分隔的字符串,然后使用 STUFF 將第一個逗號刪除并將所有產(chǎn)品名稱合并成一個字符串。最后,使用 GROUP BY 在 order_id 列的基礎(chǔ)上進行分組。
附:SQL多行合并成一行語句去重
有時候,多行數(shù)據(jù)中可能會存在重復(fù)的內(nèi)容。在進行合并時,需要去除這些重復(fù)的內(nèi)容,只保留一個即可。可以使用DISTINCT關(guān)鍵字實現(xiàn)去重。
SELECT GROUP_CONCAT(DISTINCT name SEPARATOR ',') FROM user;
在上述SQL語句中,DISTINCT關(guān)鍵字會去除name字段中的重復(fù)數(shù)據(jù),保留唯一值進行合并。執(zhí)行結(jié)果中不會包含重復(fù)的數(shù)據(jù)。
總結(jié)
到此這篇關(guān)于sql server多行數(shù)據(jù)合并一行顯示的文章就介紹到這了,更多相關(guān)sql server多行數(shù)據(jù)合并一行內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SQL?Server?Reporting?Services?匿名登錄的問題及解決方案
這篇文章主要介紹了關(guān)于?SQL?Server?Reporting?Services?匿名登錄的解決方案,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-09-09Sql Server查詢性能優(yōu)化之不可小覷的書簽查找介紹
書簽查找這個詞可能對于很多開發(fā)人員比較陌生,很多人都遇到過,但是卻沒引起足夠的重視以至于一直都忽略它的存在了2012-05-05自動清理 MSSQL Server Table Collation問題的解決方法
Cannot resolve the collation conflict between "Latin1_General_CI_AS" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation2013-02-02數(shù)據(jù)庫SQL中having和where的用法區(qū)別
這篇文章主要介紹了數(shù)據(jù)庫SQL中having和where的用法區(qū)別的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-11-11SQL Server SQL Agent服務(wù)使用教程小結(jié)
SQL Server SQL Agent服務(wù)使用教程小結(jié)...2007-03-03判斷字段是否被更新 新舊數(shù)據(jù)寫入Audit Log表中
客戶要求,要對一個敏感數(shù)據(jù)表進行Audit跟蹤。如果記錄被更新時,要把舊新保存起來,是誰更改了記錄,什么時候更新的等相關(guān)信息。還有一個主要問題就是客戶不確定具體要跟蹤那個字段,希望自己決定2012-01-01