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