日期:2014-05-17  浏览次数:20374 次

求两个查询语句
问题一:
表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
/*
Class Name
0,1,2,3,4,7 苹果,雪梨,香蕉,西瓜,葡萄,石榴
*/

------解决方案--------------------
引用:
引用:
SQL code
?



1234567891011121314151617181920212223242526272829303132333435

use Tempdb go --> -->     if not object_id(N'Tempdb..#A') is null    drop table #A Go Create tab……

对.
------解决方案--------------------
use Tempdb
go
--> --> 
  
if not object_id(N'Tempdb..#A') is null
    drop table #A