sqlserver 同列字符连接相加

来源:互联网 发布:淘宝找黑客改成绩 编辑:程序博客网 时间:2024/05/01 12:29



--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 #tb values('李四' , '物理' , 94)    select stuff('语文', 1,0, '数学') --数学语文 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('')),1,1,'')  ,分数=stuff((select ','+convert(VARCHAR(10),分数) from #tb where 姓名=t.姓名 for xml path('')),1,1,'')  from #tb t    group by 姓名    /*   姓名       选择课程           分数---------- -----------------  -------------------   李四   语文,数学,物理  74,84,94张三   语文,数学      74,83     (2 行受影响)       */        




CREATE FUNCTION dbo.fn_getStr(@NAME VARCHAR(20))RETURNS varchar(8000)ASBEGIN    DECLARE @r varchar(8000)    SET @r = ''    SELECT @r = @r + (CASE WHEN ISNULL(课程,'')='' THEN '' ELSE ','+ISNULL(课程,'') END)    FROM tb    WHERE 姓名=@NAME     RETURN STUFF(@r, 1, 1, '')ENDGO SELECT 姓名,dbo.fn_getStr(姓名) AS 课程 FROM tb GROUP BY 姓名/*姓名         课程---------- -------------------李四         语文,数学,物理张三         语文,数学(2 行受影响)*/





原创粉丝点击