sqlserver 同列字符连接相加
发布时间:2020-12-12 14:08:10 所属栏目:MsSql教程 来源:网络整理
导读:--drop table #tbcreate table #tb(姓名 varchar(10),课程 varchar(10),分数 int) insert into #tb values('张三','语文',74) insert into #tb values('张三','数学',83) insert into #tb values('李四',74) insert into #tb values('李四',84) insert into
-- drop table #tb create table #tb(姓名 varchar(10),课程 varchar(10),分数 int) insert into #tb values('张三','语文',74) insert into #tb values('张三','数学',83) insert into #tb values('李四',74) insert into #tb values('李四',84) insert into #tb values('李四','物理',94) select stuff('语文',1,'数学') --数学语文 select 课程 from #tb for xml path('') --<课程>语文</课程><课程>数学</课程><课程>语文</课程><课程>数学</课程><课程>物理</课程> SELECT 课程+'/' FROM #tb B FOR XML PATH('') --语文/数学/语文/数学/物理/ SELECT 姓名,(SELECT 课程+'/' FROM #tb B WHERE A.姓名=B.姓名 FOR XML PATH('')) AS 课程 FROM #tb A /* 张三 语文/数学/ 张三 语文/数学/ 李四 语文/数学/物理/ 李四 语文/数学/物理/ 李四 语文/数学/物理/ */ SELECT 姓名,RIGHT(课程,LEN(课程)-1) 课程,RIGHT(分数,LEN(分数)-1) 分数 FROM ( SELECT distinct 姓名,(SELECT '/'+课程 FROM #tb B WHERE A.姓名=B.姓名 FOR XML PATH('')) AS 课程,(SELECT '/'+convert(VARCHAR(10),分数) FROM #tb B WHERE A.姓名=B.姓名 FOR XML PATH('')) AS 分数 FROM #tb A ) KK --或 select 姓名,选择课程=stuff((select ','+课程 from #tb where 姓名=t.姓名 for xml path('')),''),分数=stuff((select ','+convert(VARCHAR(10),分数) from #tb where 姓名=t.姓名 for xml path('')),'') from #tb t group by 姓名 /* 姓名 选择课程 分数 ---------- ----------------- ------------------- 李四 语文,数学,物理 74,84,94 张三 语文,数学 74,83 (2 行受影响) */ CREATE FUNCTION dbo.fn_getStr(@NAME VARCHAR(20)) RETURNS varchar(8000) AS BEGIN DECLARE @r varchar(8000) SET @r = '' SELECT @r = @r + (CASE WHEN ISNULL(课程,'')='' THEN '' ELSE ','+ISNULL(课程,'') END) FROM tb WHERE 姓名=@NAME RETURN STUFF(@r,'') END GO SELECT 姓名,dbo.fn_getStr(姓名) AS 课程 FROM tb GROUP BY 姓名 /* 姓名 课程 ---------- ------------------- 李四 语文,数学,物理 张三 语文,数学 (2 行受影响) */ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |