SQL Server 如何合併組內字串

2021-10-07 17:41:32 字數 1363 閱讀 2353

就是在sql server實現類似mysql中group_concat函式的功能,把分組中的字串拼接起來。sql server 2017可以用string_agg函式實現,比如select g, string_agg(s, ',') from t group by g(按表t的g欄位分組,組內s欄位拼接起來);

但2016版沒有string_agg函式,就會麻煩很多:

select p2.g,

ss = json_value(

replace(

(select _   = p1.s from t p1 where p1.g = p2.g for json path)

,'"},{"_":"',', '),'$[0]._'

from  t p2

sql server 2014需要3層巢狀來合併組內字串,還得借助xml,**看起來非常複雜:

select main.g,

left(main.ss,len(main.ss)-1) as "ss"

from

select   distinct p2.g,

select p1.s + ',' as [text()]

from t p1

where p1.g = p2.g

order by p1.g

for xml path ('')

)[ss]

from t   p2

)[main]

其他版本的sql  server寫法雖然各有不同,但通常也很複雜。

當資料庫沒有類似group_concat這樣的函式時,可以用esproc協助實現,**會簡單很多。同樣針對2014版sql server,esproc可以這樣合併組內字串:ab

1=db.query("select g, s from t")

/query from sql server 2014

2=a1.group(g; ~.(s).concat(","))

/用逗號合併多行

這樣就可以實現類似group_concat的功能了,而且任何資料庫上都可以用。

esproc是個指令碼語言,可以在ide裡反覆執行,還可以用命令列方式呼叫,適合簡化sql中的難題。類似上面簡化分組sql的例子:

sql 難點解決:直觀分組

spl 簡化 sql 案例詳解:行間計算

spl 簡化 sql 案例詳解:計算各組前 n 行

spl 簡化 sql 案例詳解:多層固定分組

這裡有優化 sql 的彙總 集算器優化 sql 彙總

這裡是常用的 esproc 演算法 

esproc提供了敏捷的語法體系和豐富的結構化類庫,可通用地解決sql難題,詳情參考

關於集算器安裝使用、獲得免費授權和相關技術資料,可以參見

SQL Server 如何合併組內字串

就是在sql server實現類似mysql中group concat函式的功能,把分組中的字串拼接起來。sql server 2017可以用string agg函式實現,比如select g,string agg s,from t group by g 按表t的g欄位分組,組內s欄位拼接起來 但2...

sql server 分庫合併

參考 sqlserver 伺服器架構遷移 2,sql server 中心訂閱模型 多發布單訂閱 思路 是 分庫建立發布,然後新伺服器訂閱所有分庫進行資料彙總 需要注意 分庫建立發布的時候 1,分庫的發布還是需要做sid 的篩選 2,選擇設定所有表,設定屬性 名稱已被使用時的操作 為 刪除資料,如果目...

隨記 組內聚會

今天是2009年11月9日,我們倉庫開發組的兄弟姐妹們進行了一次聚會,給大家放鬆的機會,更加增加大家的感情。快到年底了,倉庫開發小組確實是辛苦忙了大半年,實現了資料倉儲從舊居移到新居,喬遷新居,是件高興的事情,但是整理舊居的物品確實是讓人頭疼的,怎麼樣能夠把積攢了這麼長時間的舊東西歸歸類,該扔掉的扔...