欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2023年11月10日 10:08:31   作者:有夢(mèng)想的菜  
這篇文章主要給大家介紹了關(guān)于SQL?Server實(shí)現(xiàn)group_concat函數(shù)的詳細(xì)舉例,GROUP_CONCAT函數(shù)可以拼接某個(gè)字段值成字符串,文中通過(guò)代碼介紹的非常詳細(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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論