SQL?Server實(shí)現(xiàn)group_concat函數(shù)的詳細(xì)舉例
一、mysql數(shù)據(jù)庫(kù)group_concat函數(shù)
情景:每個(gè)人有多張銀行卡,現(xiàn)在需統(tǒng)計(jì)出每個(gè)人的銀行卡并展示成一行,表單如下:
實(shí)現(xiàn)sql:
group_concat() 函數(shù)將組中的字符串連接成為具有各種選項(xiàng)的單個(gè)字符串。
select name,group_concat(bankCard separator ',') as bankCards from uf_yhk group by name
separator 指定在組中的值之間插入的文字值,默認(rèn) ' , '
二、SQL Server實(shí)現(xiàn)group_concat函數(shù)
實(shí)現(xiàn)sql:
select name, STUFF( (select ',' + a.bankCard from (select id,name,bankCard from uf_yhk) a where a.name = b.name FOR XML PATH('') ) ,1,1,'') as bankCards from (select id,name,bankCard from uf_yhk) b group by name
原理分析:
2.1 FOR XML PATH('')函數(shù),使結(jié)果集轉(zhuǎn)為XML文檔形式
select id,name,bankCard from uf_yhk FOR XML PATH('');
<id>1</id><name>張三</name><bankCard>500301</bankCard> <id>2</id><name>李四</name><bankCard>500302</bankCard> <id>3</id><name>張三</name><bankCard>500303</bankCard> <id>4</id><name>李四</name><bankCard>500304</bankCard> <id>5</id><name>王五</name><bankCard>500305</bankCard> <id>6</id><name>張三</name><bankCard>500306</bankCard>
2.2 轉(zhuǎn)換成單字符串
select ',' + a.bankCard from (select id,name,bankCard from uf_yhk) a where a.name = '張三' FOR XML PATH('')
,500301,500303,500306
2.3 STUFF(string,start,length,substring)用于替換字符串中的子字符串。
- string - 作為子字符串替換目標(biāo)的字符串表達(dá)式。
- start - 替換的起點(diǎn),指定為正整數(shù)。從字符串開(kāi)頭開(kāi)始的字符數(shù),從 1 開(kāi)始計(jì)數(shù)。允許的值為 0 到字符串的長(zhǎng)度。要追加字符,請(qǐng)指定 0 的開(kāi)頭和 0 的長(zhǎng)度??兆址蚍菙?shù)字值被視為 0。
- length - 要替換的字符數(shù),指定為正整數(shù)。要插入字符,請(qǐng)將長(zhǎng)度指定為 0。要在開(kāi)始后替換所有字符,請(qǐng)指定大于現(xiàn)有字符數(shù)的長(zhǎng)度??兆址蚍菙?shù)字值被視為 0。
- substring - 一個(gè)字符串表達(dá)式,用于替換由其起始點(diǎn)和長(zhǎng)度標(biāo)識(shí)的子字符串??梢员人鎿Q的子字符串更長(zhǎng)或更短??梢允强兆址?。
select STUFF( (select ',' + a.bankCard from (select id,name,bankCard from uf_yhk) a where a.name = '張三' FOR XML PATH('')) ,1,1,'')
2.4通過(guò)子查詢得到拼接后的數(shù)據(jù)
注意看2.2我限制了條件a.name = '張三' 就相當(dāng)于a.name = b.name
最后 group by name ,就大功告成。
三、Oracle數(shù)據(jù)庫(kù)實(shí)現(xiàn)
1.vm_concat函數(shù):
select vm_concat('需要拼接的列名稱(chēng)','拼接符號(hào)') from table_name group by '聚合的列名'
注意:高版本oracle不建議使用
2.listagg() within函數(shù) :
SELECT LISTAGG('需要拼接的列名稱(chēng)','拼接符號(hào)') within group (order by '排序的列名') from table_name
總結(jié)
到此這篇關(guān)于SQL Server實(shí)現(xiàn)group_concat函數(shù)的文章就介紹到這了,更多相關(guān)SQLServer實(shí)現(xiàn)group_concat函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 如何修改Mysql中g(shù)roup_concat的長(zhǎng)度限制
- mysql group_concat 實(shí)現(xiàn)把分組字段寫(xiě)成一行的方法示例
- mysql中GROUP_CONCAT的使用方法實(shí)例分析
- MySQL GROUP_CONCAT限制解決方案
- MySQL基于group_concat()函數(shù)合并多行數(shù)據(jù)
- SQL?Server實(shí)現(xiàn)group_concat功能的詳細(xì)實(shí)例
- SQL函數(shù)Group_concat的用法及說(shuō)明
- SQL中concat、concat_ws()、group_concat()的使用與區(qū)別
- MySQL group_concat函數(shù)使用方法詳解
- mysql中GROUP_CONCAT函數(shù)使用及遇到問(wèn)題詳解
- mysql中GROUP_CONCAT函數(shù)使用技巧及問(wèn)題詳解
- SQL函數(shù)實(shí)現(xiàn)Group_concat用法
相關(guān)文章
Sql Server 查詢性能優(yōu)化之走出索引的誤區(qū)分析
很多朋友可能都正在犯下面所說(shuō)的性能優(yōu)化誤區(qū)了,有需要的朋友可以參考一下Sql Server查詢性能優(yōu)化之走出索引的誤區(qū)2012-05-05SQLServer數(shù)據(jù)庫(kù)的各種管理方法
這篇文章主要介紹了SQLServer數(shù)據(jù)庫(kù)的各種管理方法,需要的朋友可以參考下2015-10-10SQL?Server創(chuàng)建用戶并授權(quán)的詳細(xì)步驟記錄
這篇文章主要介紹了SQL?Server創(chuàng)建用戶并授權(quán)的詳細(xì)步驟,本文詳細(xì)解釋了創(chuàng)建用戶和授權(quán)的兩種方式,分別是SQL命令和使用SQL?Server?Management?Studio?(SSMS),需要的朋友可以參考下2024-12-12SQL Server中利用正則表達(dá)式替換字符串的方法
這篇文章主要介紹了SQL Server中利用正則表達(dá)式替換字符串的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03SQL查詢數(shù)據(jù)庫(kù)中符合條件的記錄的總數(shù)
這篇文章主要介紹了SQL查詢數(shù)據(jù)庫(kù)中符合條件的記錄的總數(shù)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09