[在线求教]如何将一列的数据,根据某一列分组后,合并到一个列中

yixian2007 2014-06-26 08:32:33
用语言可能描述的不够清楚,举例说明吧。
序号 课程编号 班级名称
1 010010 T1123-1
2 010020 T1123-1
3 010010 T1133-1
4 010020 T1153-1
用课程编号分组,将班级名称按照一定的顺序组合起来,形成如下的结果
010010 T1123-1,T1133-1
010020 T1123-1,T1153-1
...全文
251 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yixian2007 2014-06-26
  • 打赏
  • 举报
回复
谢谢大家,结贴给分。
向东流 2014-06-26
  • 打赏
  • 举报
回复
在FOR XML里面排序
SELECT 课程编号, 班级名称S=STUFF((SELECT ','+班级名称 FROM tb t WHERE  课程编号=t1.课程编号  ORDER BY 班级名称 FOR XML PATH('')), 1, 1, '')
FROM tb t1
GROUP BY 课程编号
唐诗三百首 2014-06-26
  • 打赏
  • 举报
回复

create table yx
(序号 int,课程编号 varchar(10),班级名称 varchar(10))

insert into yx
 select 1,'010010','T1123-1' union all
 select 2,'010020','T1153-1' union all
 select 3,'010010','T1133-1' union all
 select 4,'010020','T1123-1'


select a.课程编号,
       stuff((select ','+b.班级名称 
              from yx b 
              where b.课程编号=a.课程编号
              order by b.班级名称 
              for xml path('')),1,1,'') '班级名称'
 from yx a
 group by a.课程编号

/*
课程编号       班级名称
---------- -----------------------
010010     T1123-1,T1133-1
010020     T1123-1,T1153-1

(2 row(s) affected)
*/
以学习为目的 2014-06-26
  • 打赏
  • 举报
回复
引用 7 楼 yixian2007 的回复:
[quote=引用 6 楼 blandwolf 的回复:] 上测试数据和结果
我的意思是,可以不可以加order by 排序,因为上面的例子中 序号 课程编号 班级名称 1 010010 T1123-1 2 010020 T1123-1 3 010010 T1133-1 4 010020 T1153-1 假如我将第2行和第4行交换一下 1 010010 T1123-1 2 010020 T1153-1 3 010010 T1133-1 4 010020 T1123-1 如果还要形成 010010 T1123-1,T1133-1 010020 T1123-1,T1153-1 这样的,能在刚才那条语句中排序吗?[/quote]
declare @galenkeny table(序号 int identity(1,1),课程编号 VARCHAR(10),班级名称 VARCHAR(10))
insert into @galenkeny
SELECT '010010', 'T1123-1' union all
select '010020', 'T1153-1' union all
select '010010', 'T1133-1' union all
SELECT '010020', 'T1123-1' 



select  b.课程编号,
        班级名称=STUFF((SELECT ','+班级名称 FROM @galenkeny a WHERE  b.课程编号=a.课程编号 ORDER by 班级名称 FOR XML PATH('')),1,1,'')
        FROM  @galenkeny b
        GROUP BY b.课程编号
       
yixian2007 2014-06-26
  • 打赏
  • 举报
回复
引用 6 楼 blandwolf 的回复:
上测试数据和结果
我的意思是,可以不可以加order by 排序,因为上面的例子中 序号 课程编号 班级名称 1 010010 T1123-1 2 010020 T1123-1 3 010010 T1133-1 4 010020 T1153-1 假如我将第2行和第4行交换一下 1 010010 T1123-1 2 010020 T1153-1 3 010010 T1133-1 4 010020 T1123-1 如果还要形成 010010 T1123-1,T1133-1 010020 T1123-1,T1153-1 这样的,能在刚才那条语句中排序吗?
向东流 2014-06-26
  • 打赏
  • 举报
回复
上测试数据和结果
yixian2007 2014-06-26
  • 打赏
  • 举报
回复
引用 3 楼 DBA_Huangzj 的回复:
select a.课程编号,
stuff((select ','+班级名称 from tb b 
       where b.课程编号=a.课程编号
       for xml path('')),1,1,'') '班级名称'
from tb a
group by  a.课程编号
引用 2 楼 blandwolf 的回复:
mssql2005
SELECT 课程编号, 班级名称S=STUFF((SELECT ','+[班级名称] FROM table t WHERE  课程编号e=t1. 课程编号 FOR XML PATH('')), 1, 1, '')
FROM table t1
GROUP BY 课程编号
两位大神,这个功能我明白了,但还差一个,将班级名称按一定的顺序排序啊。这种方法可以排序不?
以学习为目的 2014-06-26
  • 打赏
  • 举报
回复
declare @galenkeny table(序号 int identity(1,1),课程编号 VARCHAR(10),班级名称 VARCHAR(10))
insert into @galenkeny
SELECT '010010', 'T1123-1' union all
select '010020', 'T1123-1' union all
select '010010', 'T1133-1' union all
SELECT '010020', 'T1153-1' 



select  b.课程编号,
        班级名称=STUFF((SELECT ','+班级名称 FROM @galenkeny a WHERE  b.课程编号=a.课程编号 FOR XML PATH('')),1,1,'')
        FROM  @galenkeny b
        GROUP BY b.课程编号
發糞塗牆 2014-06-26
  • 打赏
  • 举报
回复
select a.课程编号,
stuff((select ','+班级名称 from tb b 
       where b.课程编号=a.课程编号
       for xml path('')),1,1,'') '班级名称'
from tb a
group by  a.课程编号
向东流 2014-06-26
  • 打赏
  • 举报
回复
mssql2005
SELECT 课程编号, 班级名称S=STUFF((SELECT ','+[班级名称] FROM table t WHERE  课程编号e=t1. 课程编号 FOR XML PATH('')), 1, 1, '')
FROM table t1
GROUP BY 课程编号
yixian2007 2014-06-26
  • 打赏
  • 举报
回复
忘了说了,能用一条语句完成吗?

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧