[sql server] 问题总结2 - 递归
2011-03-02 09:20
183 查看
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
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
相关文章推荐
- Sql server一些常见性能问题的总结
- SQL SERVER中一些常见性能问题的总结
- [sql server] 行转列问题总结1 - 行转列 .
- [sql server] 问题总结17---一个项目涉及到的50个Sql语句(爱新觉罗.毓华整理版)
- Sql server一些常见性能问题的总结
- SQL SERVER中一些常见性能问题的总结
- SQL Server的所有数据删除后,主键恢复成以1开始计数问题总结
- Letter Combinations of a Phone Number(带for循环的DFS,组合问题,递归总结)
- [转]SQL SERVER中一些常见性能问题的总结
- [sql server] 问题总结10---SQL 日期转换 日期推算 增加或是减少一年或是一天 非常值得收藏
- SQL Server安装过程出现的问题总结
- [sql server] 问题总结3 - 获取最大值,最小值的 not exists
- SQL SERVER中一些常见性能问题的总结
- 转:Sql server一些常见性能问题的总结
- [sql server] 行转列问题总结1 - 行转列
- SQL SERVER中一些常见性能问题的总结
- SQL SERVER中一些常见性能问题的总结[转]
- Sql server一些常见性能问题的总结
- 【转】[sql server] 行转列问题总结1 - 行转列
- [sql server] 问题总结11---按某一字段分组取最大(小)值所在行的数据