tab1
id kindnum kindname
1 001 男装
2 001001 上衣
3 001002 裤类
4 001001001 西装
5 002 女装
6 001001002 风衣
7 002001 帽
8 002002 上衣
9 002003 裙
我现在想实现查询出来的显示结果如下:
id kindnum kindname full_kindname
1 001 男装 男装
2 001001 上衣 男装-上衣
3 001002 裤类 男装-裤类
4 001001001 西装 男装-上衣-西装
6 001001002 风衣 男装-裤类-风衣
5 002 女装 女装
7 002001 帽 女装-帽
8 002002 上衣 女装-上衣
9 002003 裙 女装-裙
如何写这个SQL语句呢?
——————————————————————————————
if object_id('[tab1]') is not null drop table [tab1]
go
create table [tab1]([id ] int,kindnum varchar(20),kindname varchar(20))
insert [tab1]
select 1 ,'001', '男装' union all
select 2 ,'001001', '上衣' union all
select 3 ,'001002', '裤类' union all
select 4 ,'001001001', '西装' union all
select 5 ,'002', '女装' union all
select 6 ,'001001002', '风衣' union all
select 7 ,'002001', '帽' union all
select 8 ,'002002', '上衣' union all
select 9 ,'002003', '裙'
go
if object_id('f_getk') is not null drop function f_getk
create function f_getk(@kindname varchar(20))
returns varchar(100)
as
begin
declare @k_full varchar(300)
declare @i int
set @i =1
while len(@kindname)>= 3*@i
begin
select @k_full=isnull(@k_full+'-','')+kindname from tab1 where kindnum = left(@kindname,3*@i)
set @i = @i+1
end
return @k_full
end
select * ,dbo.f_getk(kindnum) as 'full_kname' from tab1