亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SQL?Server實(shí)現(xiàn)group_concat函數(shù)的詳細(xì)舉例

 更新時間:2023年11月10日 10:08:31   作者:有夢想的菜  
這篇文章主要給大家介紹了關(guān)于SQL?Server實(shí)現(xiàn)group_concat函數(shù)的詳細(xì)舉例,GROUP_CONCAT函數(shù)可以拼接某個字段值成字符串,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、mysql數(shù)據(jù)庫group_concat函數(shù)

情景:每個人有多張銀行卡,現(xiàn)在需統(tǒng)計出每個人的銀行卡并展示成一行,表單如下:

實(shí)現(xiàn)sql:

group_concat() 函數(shù)將組中的字符串連接成為具有各種選項的單個字符串。

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ù)。從字符串開頭開始的字符數(shù),從 1 開始計數(shù)。允許的值為 0 到字符串的長度。要追加字符,請指定 0 的開頭和 0 的長度??兆址蚍菙?shù)字值被視為 0。
  • length - 要替換的字符數(shù),指定為正整數(shù)。要插入字符,請將長度指定為 0。要在開始后替換所有字符,請指定大于現(xiàn)有字符數(shù)的長度??兆址蚍菙?shù)字值被視為 0。
  • substring - 一個字符串表達(dá)式,用于替換由其起始點(diǎn)和長度標(biāo)識的子字符串??梢员人鎿Q的子字符串更長或更短??梢允强兆址?/li>
select STUFF(
            (select ',' + a.bankCard   from (select id,name,bankCard from uf_yhk) a where a.name = '張三' FOR XML PATH(''))
        ,1,1,'')

2.4通過子查詢得到拼接后的數(shù)據(jù)

注意看2.2我限制了條件a.name = '張三' 就相當(dāng)于a.name = b.name

最后 group by name ,就大功告成。

三、Oracle數(shù)據(jù)庫實(shí)現(xiàn)

1.vm_concat函數(shù):

select vm_concat('需要拼接的列名稱','拼接符號') from table_name group by '聚合的列名'

注意:高版本oracle不建議使用

2.listagg() within函數(shù) :

SELECT LISTAGG('需要拼接的列名稱','拼接符號') 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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論