求两个查询语句

ggsysy 2013-04-04 09:20:39
问题一:
表A:某一字段
【经营种类】
0,1,2,3,4,7
表B:两个字段
【序号】【名称】
0 苹果
1 雪梨
2 香蕉
3 西瓜
4 葡萄
5 草莓
6 芒果
7 石榴

表A中经营种类中的数字是和表B中的序号一一对应的,只不过表A中的经营种类字段中,存储的是文本形式,序号之间用,隔开。
现在我要把对应的经营种类“0,1,2,3,4,7”
查询显示为(一个字段):
苹果,雪梨,香蕉,西瓜,葡萄,石榴

问题二:
假如上述表A中的【经营种类】字段中有6行,分别是
0
1
2
3
4
7
那么查询显示的结果同样要为(同样是一个字段):苹果,雪梨,香蕉,西瓜,葡萄,石榴

该如何写这样的查询语句?
...全文
156 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ggsysy 2013-04-05
  • 打赏
  • 举报
回复
引用 1 楼 roy_88 的回复:
SQL code ? 1234567891011121314151617181920212223242526272829303132333435 use Tempdb go --> --> if not object_id(N'Tempdb..#A') is null drop table #A Go Create table #A([Class] nvarch……
学习到了for xml path的用法。。感谢。 那查询语句2要怎样写呢,也是用for xml path的方式,把6行合并变为1行?
lengxiaowei 2013-04-05
  • 打赏
  • 举报
回复
select name=stuff((select ''+[name] from ( Select Name= ','+[名称] from #A a inner join #B b on [Class]=rtrim([序号])) a for xml path('')),1,1,'')
lengxiaowei 2013-04-05
  • 打赏
  • 举报
回复
use Tempdb go --> --> if not object_id(N'Tempdb..#A') is null drop table #A Go Create table #A([Class] nvarchar(11)) Insert #A select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 Go use Tempdb go --> --> if not object_id(N'Tempdb..#B') is null drop table #B Go Create table #B([序号] int,[名称] nvarchar(2)) Insert #B select 0,N'苹果' union all select 1,N'雪梨' union all select 2,N'香蕉' union all select 3,N'西瓜' union all select 4,N'葡萄' union all select 5,N'草莓' union all select 6,N'芒果' union all select 7,N'石榴' Go select name=stuff((select ''+[name] from ( Select Name= (select ','+[名称] from #B where [Class]=rtrim([序号]) for xml path('')) from #A as a) a for xml path('')),1,1,'')
ggsysy 2013-04-05
  • 打赏
  • 举报
回复
引用 4 楼 SQL77 的回复:
引用 3 楼 guangguang2007 的回复: 引用 1 楼 roy_88 的回复: SQL code ? 1234567891011121314151617181920212223242526272829303132333435 use Tempdb go --> --> if not object_id(N'Tempdb..#A') is null ……
比如我执行select ','+[名称] from #B for xml path('') 这个字段名要怎样更改?
SQL77 2013-04-05
  • 打赏
  • 举报
回复
引用 3 楼 guangguang2007 的回复:
引用 1 楼 roy_88 的回复: SQL code ? 1234567891011121314151617181920212223242526272829303132333435 use Tempdb go --> --> if not object_id(N'Tempdb..#A') is null drop table #A Go Create tab……
对.
中国风 2013-04-04
  • 打赏
  • 举报
回复
use Tempdb
go
--> --> 
 
if not object_id(N'Tempdb..#A') is null
	drop table #A
Go
Create table #A([Class] nvarchar(11))
Insert #A
select N'0,1,2,3,4,7'
Go
use Tempdb
go
--> --> 
 
if not object_id(N'Tempdb..#B') is null
	drop table #B
Go
Create table #B([序号] int,[名称] nvarchar(2))
Insert #B
select 0,N'苹果' union all
select 1,N'雪梨' union all
select 2,N'香蕉' union all
select 3,N'西瓜' union all
select 4,N'葡萄' union all
select 5,N'草莓' union all
select 6,N'芒果' union all
select 7,N'石榴'
Go
Select [Class],Name=stuff((select ','+[名称] from #B where ','+[Class]+',' like '%,'+rtrim([序号])+',%' for xml path('')) ,1,1,'')
from #A as a
/*
Class	Name
0,1,2,3,4,7	苹果,雪梨,香蕉,西瓜,葡萄,石榴
*/

27,580

社区成员

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

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