[回忆篇]SQL行列转换-合并列值(示例)

转自CSDN,5年前写的第一篇技术类的文章,当时还是个小菜鸟,一转眼5年过去了

当时从知乎摘抄的别人的励志故事,激励工作不久略失意的自己(工作缺少激情),开始利用下班时间自学android开发、iOS开发、Python开发。。。

职业方向有点迷茫,就都在学。

幸运的是,公司下班较早5点多就下班了,租住在人大附近,一下班就蹭人大的自习室学习,有时蹭女友的图书馆卡去借书看。

那段日子还是挺充实的,想想现在,基本没有自己的时间,唉。。。

工作用到很多数据库的知识,一点小总结

https://blog.csdn.net/webgeek/article/details/8677961

----------------------------------------------------------------------说正事分割线------------------------------------------------------------------------------------

/*需求:合并列值.

无论是在sql 2000, 还是在 sql 2005 中,都没有提供字符串的聚合函数,

所以, 当我们在处理下列要求时,会比较麻烦:表数据:

id    value

----- ------

1     aa

1     bb

2     aaa

2     bbb

2     ccc

需要得到结果:

id     values

------ -----------

1      aa,bb

2      aaa,bbb,ccc

即, group by id, 求 value 的字符串相加的值*/


--示例演示: 首先创建临时表数据

CREATE TABLE #A(id INT ,value0 VARCHAR(50))

INSERT INTO #A

SELECT 1, 'aa'

UNION ALL

SELECT 1, 'bb'

UNION ALL

SELECT 2, 'aaa'

UNION ALL

SELECT 2, 'bbb'

UNION ALL

SELECT 2, 'ccc'

SELECT * FROM #A

-- 0、简义方式:动态赋值 合并某一个相同项的值

DECLARE @sql VARCHAR(1000)

SELECT @sql=COALESCE(@sql+',','')+ value0 FROM #A WHERE id = 2

SELECT @sql

-- ======================

--1. 使用用户标量函数, 合并相同项的值

--=======================

CREATE FUNCTION dbo.ufn_Append(@id int)

RETURNS varchar(8000)

AS

BEGIN

DECLARE @r varchar(8000)

SET @r = ''

SELECT @r = @r + ',' + value0

FROM #A

WHEREid=@id

RETURN STUFF(@r, 1, 1, '') --清除第一个;分隔符

END

GO

-- 调用函数

SELECt id, values=dbo.ufn_Append(id)

FROM #A

GROUP BY id


-- =========================

-- 使用CTE嵌套查询 for sqlserver 2005 特性

-- =========================

WITH tb1(id,totalCount,col_List,value0,curr_count)

AS (

SELECT id,        -- 区别关键列

COUNT(*) OVER(PARTITION BY id), -- 作外表区分列时使用

CAST(value0 AS VARCHAR(2000)),  --为确认值是字符串相加,转换,待合并的列值

value0,       --区别副列

1        --计数列

FROM #A

UNION ALL

SELECT tb1.id,

tb1.totalCount,

CAST(tb1.col_List + ',' + e.value0 AS VARCHAR(2000)), --合并列值

e.value0,

tb1.curr_count + 1    --当前积累计数

FROM #A e,tb1       -- 循环,返回左右两表交叉的所有记录

WHERE e.id = tb1.id AND e.value0 > tb1.value0 -- 筛选有用数据,书名死循环

)

--SELECT * FROM tb1 ORDER BY 1 /*查询嵌套表数据*/

SELECT id,col_List FROM tb1

WHERE totalCount = curr_count

ORDER BY 1 /*列出合并列值后的值*/

--SELECT * FROM #A ORDER BY 1  /*查询源表数据*/


--================= =================

--OUTER APPLY返回左右两表的所有行 for sqlserver 2005

--==================================

SELECT *

FROM(

SELECT DISTINCT

id

FROM #A

)A

OUTER APPLY(

SELECT

[values]= STUFF(REPLACE(REPLACE(

(

SELECT value FROM #A N

WHERE id = A.id

FOR XML AUTO

), '', ''), 1, 1, '')

)N

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容