求两个查询语句
问题一:
表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
那么查询显示的结果同样要为(同样是一个字段):苹果,雪梨,香蕉,西瓜,葡萄,石榴
该如何写这样的查询语句?
[解决办法]
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
/*
ClassName
0,1,2,3,4,7苹果,雪梨,香蕉,西瓜,葡萄,石榴
*/
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,'')
[解决办法]
select name=stuff((select ''+[name]
from (
Select Name= ','+[名称]
from #A a inner join #B b on [Class]=rtrim([序号])) a for xml path('')),1,1,'')