SQL字段值合并问题

pend_w 2015-07-22 11:21:19
表a
xxdm(学校代码) xxmc(学校名称)
001 郑州大学
002 山东大学
003 北京大学

表b
xxdm(学校代码) kc(课程) js(讲师)
001 数据库 路人甲
001 微积分 路人乙
002 数据库 路人甲
002 微积分 路人乙
002 电影欣赏 路人A

想实现一下结果
xxdm xxmc kcjs
001 郑州大学 数据库 路人甲 微积分 路人乙
002 山东大学 数据库 路人甲 微积分 路人乙 电影欣赏 路人A
003 北京大学


不用游标,谢谢
...全文
126 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
许晨旭 2015-07-22
  • 打赏
  • 举报
回复
declare @a table
(
	xxdm varchar(10),
	xxmc varchar(10)
)
insert into @a
select '001','郑州大学' union all
select '002','山东大学' union all
select '003','北京大学'

declare @b table
(
	xxdm varchar(10),
	kc varchar(10),
	js varchar(10)
)
insert into @b
select '001','数据库','路人甲' union all
select '001','微积分','路人乙' union all
select '002','数据库','路人甲' union all
select '002','微积分','路人乙' union all
select '002','电影欣赏','路人A'


select a.xxdm,
       a.xxmc,
		(select ' '+kc+js
		from @b b
		where a.xxdm=b.xxdm
		for xml path('')) as kcjs
from @a a
xxdm       xxmc       kcjs
---------- ---------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
001        郑州大学        数据库路人甲 微积分路人乙
002        山东大学        数据库路人甲 微积分路人乙 电影欣赏路人A
003        北京大学       NULL

(3 行受影响)
Pact_Alice 2015-07-22
  • 打赏
  • 举报
回复
晕,你早说啊 declare @a table ( xxdm varchar(10), xxmc varchar(10) ) insert into @a select '001','郑州大学' union all select '002','山东大学' union all select '003','北京大学' declare @b table ( xxdm varchar(10), kc varchar(10), js varchar(10) ) insert into @b select '001','数据库','路人甲' union all select '001','微积分','路人乙' union all select '002','数据库','路人甲' union all select '002','微积分','路人乙' union all select '002','电影欣赏','路人A' SELECT t1.xxdm,t1.xxmc,t2.kc+' '+t2.js AS [A] INTO Temp_XM FROM @a t1 left join @b t2 on t1.xxdm=t2.xxdm create function dbo.f_str(@id VARCHAR(200)) returns varchar(100) as begin declare @str varchar(1000) set @str ='' select @str = @str + ',' + cast(A as varchar) from Temp_XM where xxdm = @id set @str = right(@str ,len(@str) - 1) return @str end GO SELECT distinct xxdm,xxmc ,VALUE=dbo.f_str(xxdm) FROM Temp_XM
pend_w 2015-07-22
  • 打赏
  • 举报
回复
不好意思 本人用的sql2000貌似不支持xml
Pact_Alice 2015-07-22
  • 打赏
  • 举报
回复
declare @a table ( xxdm varchar(10), xxmc varchar(10) ) insert into @a select '001','郑州大学' union all select '002','山东大学' union all select '003','北京大学' declare @b table ( xxdm varchar(10), kc varchar(10), js varchar(10) ) insert into @b select '001','数据库','路人甲' union all select '001','微积分','路人乙' union all select '002','数据库','路人甲' union all select '002','微积分','路人乙' union all select '002','电影欣赏','路人A' SELECT xxdm,xxmc,ISNULL((STUFF((SELECT ','+t1.kc+t1.js FROM @b t1 WHERE t1.xxdm=t2.xxdm FOR XML PATH ('') ),1,1,'')),'')AS kcjs FROM @a t2 GROUP BY xxdm,xxmc 如果是NULL 就给空值
Pact_Alice 2015-07-22
  • 打赏
  • 举报
回复
试试这个吧。
Pact_Alice 2015-07-22
  • 打赏
  • 举报
回复
declare @a table ( xxdm varchar(10), xxmc varchar(10) ) insert into @a select '001','郑州大学' union all select '002','山东大学' union all select '003','北京大学' declare @b table ( xxdm varchar(10), kc varchar(10), js varchar(10) ) insert into @b select '001','数据库','路人甲' union all select '001','微积分','路人乙' union all select '002','数据库','路人甲' union all select '002','微积分','路人乙' union all select '002','电影欣赏','路人A' SELECT xxdm,xxmc,(STUFF((SELECT ','+t1.kc+t1.js FROM @b t1 WHERE t1.xxdm=t2.xxdm FOR XML PATH ('') ),1,1,''))AS kcjs FROM @a t2 GROUP BY xxdm,xxmc
pend_w 2015-07-22
  • 打赏
  • 举报
回复
Cherise_huang 2015-07-22
  • 打赏
  • 举报
回复
你是不是少复制东西了,缺少单引或者什么的,按照一楼的写法可以得出要的答案的
许晨旭 2015-07-22
  • 打赏
  • 举报
回复
把脚本全部执行才可以,不是选中select的那句执行
pend_w 2015-07-22
  • 打赏
  • 举报
回复
引用 1 楼 Landa_Ran 的回复:
declare @a table
(
	xxdm varchar(10),
	xxmc varchar(10)
)
insert into @a
select '001','郑州大学' union all
select '002','山东大学' union all
select '003','北京大学'

declare @b table
(
	xxdm varchar(10),
	kc varchar(10),
	js varchar(10)
)
insert into @b
select '001','数据库','路人甲' union all
select '001','微积分','路人乙' union all
select '002','数据库','路人甲' union all
select '002','微积分','路人乙' union all
select '002','电影欣赏','路人A'


select a.xxdm,
       a.xxmc,
		(select ' '+kc+js
		from @b b
		where a.xxdm=b.xxdm
		for xml path('')) as kcjs
from @a a
xxdm       xxmc       kcjs
---------- ---------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
001        郑州大学        数据库路人甲 微积分路人乙
002        山东大学        数据库路人甲 微积分路人乙 电影欣赏路人A
003        北京大学       NULL

(3 行受影响)
执行结果 服务器: 消息 170,级别 15,状态 1,行 5 第 5行: 'XML' 附近有语法错误。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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