select 公司名称,地址,(select 行业名称 from 行业分类表 where 行业编号='07' and 行业编号=a.行业编号)[一级分类],
(select 行业名称 from 行业分类表 where 行业编号='0701' and 行业编号=a.行业编号)[二级分类],
(select 行业名称 from 行业分类表 where 行业编号='0702' and 行业编号=a.行业编号)[三级分类],
(select 行业名称 from 行业分类表 where 行业编号='070202' and 行业编号=a.行业编号)[三级分类],
(select 行业名称 from 行业分类表 where 行业编号='070203' and 行业编号=a.行业编号)[三级分类]
from 公司资料表
(select 行业名称 from 行业分类表 where 行业编号='0701' and 行业编号=a.行业编号)[二级分类],
(select 行业名称 from 行业分类表 where 行业编号='0702' and 行业编号=a.行业编号)[三级分类],
(select 行业名称 from 行业分类表 where 行业编号='070202' and 行业编号=a.行业编号)[三级分类],
(select 行业名称 from 行业分类表 where 行业编号='070203' and 行业编号=a.行业编号)[三级分类]
from 公司资料表
select 公司名称,地址,(select 行业名称 from 行业分类表 where 行业编号='07' and 行业编号=a.行业编号)[一级分类],
(select 行业名称 from 行业分类表 where 行业编号='0701' and 行业编号=a.行业编号)[二级分类],
(select 行业名称 from 行业分类表 where 行业编号='0702' and 行业编号=a.行业编号)[三级分类],
(select 行业名称 from 行业分类表 where 行业编号='070202' and 行业编号=a.行业编号)[三级分类],
(select 行业名称 from 行业分类表 where 行业编号='070203' and 行业编号=a.行业编号)[三级分类]
from 公司资料表 a
returns @re table(@公司名称 varchar(80),@地址 varchar(200),@一级分类 varchar(100),@二级分类 varchar(100),@三级分类 varchar(100))
as
begin
select * from 行业分类表 where substring(行业编号,1,2)= substring(@Number,1,2) order by 行业编号
--declare @l int
--set @l=0
select @公司名称=公司名称 from 公司资料表 where 行业编号=@Number
select @地址=地址 from 公司资料表 where 行业编号=@Number
select @一级分类=行业名称 from 行业分类表 where 行业编号=substring(@Number,1,2)
select @二级分类=行业名称 from 行业分类表 where 行业编号=substring(@Number,1,4)
select @三级分类=行业名称 from 行业分类表 where 行业编号=substring(@Number,1,6)
insert @re select @公司名称,@地址,@一级分类,@二级分类,@三级分类
return
end
(select 行业名称 from 行业分类表 where 行业编号=left(a.行业编号,4))[二级分类],
(select 行业名称 from 行业分类表 where 行业编号=left(a.行业编号,6))[三级分类]
from 公司资料表 aor:
select 公司名称,地址,b.行业名称 [一级分类],c.行业名称 [二级分类],d.行业名称 [三级分类]
from 公司资料表 a left join 行业分类表 b
on b.行业编号=left(a.行业编号,2)
left join 行业分类表 c
on c.行业编号=left(a.行业编号,4)
left join 行业分类表 d
on d.行业编号=left(a.行业编号,6)一楼的答案有小错误,可惜错了不管!哈,哈哈,哈哈哈......
declare @i varchar(10),@s varchar(8000)
select @s='',@i=max(len(行业编号))/2
from 公司资料表
while @i>0
select @s=',['+@i+'级分类]=max(case len(b.行业编号) when '
+cast(@i*2 as varchar)+' then b.行业名称 else '''' end)'+@s
,@i=@i-1
exec('
select a.公司名称,a.地址'+@s+'
from 公司资料表 a,行业分类表 b
where a.行业编号 like b.行业编号+''%''
group by a.公司名称,a.地址,a.行业编号')
create table 公司资料表(公司名称 varchar(10),地址 varchar(10),行业编号 varchar(10))
insert 公司资料表 select 'AAA公司','XXX路XX号','070202'
union all select 'BBB公司','XXX路XX号','070203'create table 行业分类表(行业编号 varchar(10),行业名称 varchar(20))
insert 行业分类表 select '07' ,'皮革/毛皮其制品'
union all select '0701' ,'制革业'
union all select '0702' ,'皮革制品'
union all select '070202','革皮服装'
union all select '070203','皮箱制造'
go--查询(动态的,要求每级编号固定两位,但可以是任意级数)
declare @i varchar(10),@s varchar(8000)
select @s='',@i=max(len(行业编号))/2
from 公司资料表
while @i>0
select @s=',['+@i+'级分类]=max(case len(b.行业编号) when '
+cast(@i*2 as varchar)+' then b.行业名称 else '''' end)'+@s
,@i=@i-1
exec('
select a.公司名称,a.地址'+@s+'
from 公司资料表 a,行业分类表 b
where a.行业编号 like b.行业编号+''%''
group by a.公司名称,a.地址,a.行业编号')go--删除测试
drop table 公司资料表,行业分类表/*--测试结果公司名称 地址 1级分类 2级分类 3级分类
---------- ---------- -------------------- ---------- ------------
AAA公司 XXX路XX号 皮革/毛皮其制品 皮革制品 革皮服装
BBB公司 XXX路XX号 皮革/毛皮其制品 皮革制品 皮箱制造
--*/
在大家的方案中, zjcxc(邹建) 先生的方法能最好的解决这个问题.而且整个过程相当的详细,在此表示衷心的感谢!
其它的方案都有一些小的缺陷,如下:
假如某些的行业分类没有第三级,其后将会从复第二级的分类,如"制革业",按要求如没有更细的分类应为"空"
公司名称 地址 一级分类 二级分类 三级分类
AAA公司 XXX路XX号 皮革/毛皮其制品 制革业 制革业 (0701)
BBB公司 XXX路XX号 皮革/毛皮其制品 皮革制品 皮箱制造 (070202) 再次谢谢大家!