A表ID PARENT MC
001.001 001 拉丝机
001.001.001 001.001 轴承
001.001.001.001 001.001.001 垫片
我想查询得到
如果我给的ID 为001.001.001.001,并且要示显示二级希望得到ID 一级 二级 MC
001.001.001.001 拉丝机 轴承 垫片
如何我给的ID 为001.001.001,并且要示显示二级希望得到ID 一级 二级 MC
001.001.001 无 拉丝机 轴承
001.001 001 拉丝机
001.001.001 001.001 轴承
001.001.001.001 001.001.001 垫片
我想查询得到
如果我给的ID 为001.001.001.001,并且要示显示二级希望得到ID 一级 二级 MC
001.001.001.001 拉丝机 轴承 垫片
如何我给的ID 为001.001.001,并且要示显示二级希望得到ID 一级 二级 MC
001.001.001 无 拉丝机 轴承
解决方案 »
- 请问.dat是什么数据库,用什么工具可以打开修改?
- 如何只把登录安全设置为SQL验证?
- 怎么建立没有语句的空视图
- 双机热备,高手救命!!!
- sqlserver top
- 关于进程、锁ID的问题,大家帮帮忙吧,急!!!
- 数据库资源占用太大,造成无法访问,help!
- 用存储过程,使其的OUTPUT参数为表的记录数,这个参数怎么设置哪?
- 这个存储过程怎么写?
- 挑战高手的问题: 如何在select 语句中加一个自动编号栏; 例如: select 自动编号, name from person where dep=’x’ ; 能解该题的人肯定是绝对的高手; 我在实际工作中就碰到这样的需求, 不知怎幺解决?
- sql 2000 telnet 内网 1433 可以 外网不行!!!
- 这句动态语句应该怎么写?
IF NOT OBJECT_ID('tb') IS NULL
DROP TABLE tb
create table tb (id varchar(50), parent varchar(50),mc varchar(50))
insert into tb select '001.001','001','拉丝机'
insert into tb select '001.001.001','001.001','轴承'
insert into tb select '001.001.001.001','001.001.001','垫片'---根据底层物料查询上层物料(物料用途)with at as
(
select a.parent,a.id ,0 as levl,mc from tb a where a.id='001.001.001.001'--这里是条件
union all
select a.parent,a.id,levl - 1 ,a.mc from tb a join at on a.id=at.parent
)
select a.id,一级,二级,mc from (
select max(id)id,max(case when levl=-2 then mc else null end )as "一级",max(case when levl=-1 then mc else null end) as "二级" from at )a
join tb on a.id=tb.id
/*
id 一级 二级 mc
001.001.001.001 拉丝机 轴承 垫片/code]
declare @leng int;
declare @str varchar(50);
set @str='001.001.001.001';-- 判定级数用这个公式就行,级数 = 字符的长度 - 去除“.”后的长度 (再加或减一个基本量)
set @leng = len(@str) - len(REPLACE(@str, '.', '')) - 1
print @leng