求SQL语句,取某物料的下层所有物料
本帖最后由 laty_cathy 于 2012-07-30 16:25:09 编辑 大家好!
如何用SQL语句,当标志为'Y'时,将其下层所有物料全部取出来,见下图:
将黄色背景的数据取出来。
谢谢!
[最优解释]
select * from tb as a
(
select * from tb where 标识='Y'
) as b
where and a.序号 like b.序号+'%'
CREATE TABLE test([阶层] int,[序号] varchar(50),[标志] varchar(2))
go
insert into test
select 1,'0010','' union all
select 2,'0010010','' union all
select 3,'0010010010','' union all
select 2,'00100020','Y' union all
select 3,'001000200010','' union all
select 4,'0010002000100010','' union all
select 5,'00100020001000100010','' union all
select 2,'00100030','' union all
select 3,'001000300010','' union all
select 4,'0010003000100010','Y' union all
select 5,'00100030001000100010',''
SELECT * FROM test as a,(SELECT [序号] FROM test WHERE [标志]='Y') as b
WHERE a.[序号] LIKE b.[序号]+'%' and a.[标志]<>'Y'
drop table test
SELECT * FROM TBL WHERE 序号 LIKE '001000200010%'
IF OBJECT_ID('XX') IS NOT NULL
DROP TABLE XX
GO
CREATE TABLE XX([阶层] int,[序号] varchar(50),[标志] varchar(2))
go
insert into XX
select 1,'0010','' union all
select 2,'0010010','' union all
select 3,'0010010010','' union all
select 2,'00100020','Y' union all
select 3,'001000200010','' union all
select 4,'0010002000100010','' union all
select 5,'00100020001000100010','' union all
select 2,'00100030','' union all
select 3,'001000300010','' union all
select 4,'0010003000100010','Y' union all
select 5,'00100030001000100010',''
SELECT * FROM XX A
WHERE EXISTS
(SELECT TOP 1 1 FROM XX B WHERE B.标志 = 'Y' AND A.序号 LIKE(B.序号+'%') AND LEN(A.序号)>LEN(B.序号))
create table #tb (阶层 int ,序号 varchar(50),标志 char(2))
insert into #tb values(1,'0010','')
insert into #tb values(2,'00100010','')
insert into #tb values(3,'001000100010','')
insert into #tb values(2,'00100020','Y')
insert into #tb values(3,'001000200010','' )--
insert into #tb values(4,'0010002000100010' ,'')--
insert into #tb values(5,'00100020001000100010' ,'')--
insert into #tb values(2,'00100030','')
insert into #tb values(2,'001000300010','')
insert into #tb values(2,'0010003000100010','Y')
insert into #tb values(2,'00100030001000100010','')--
select t.*
from #tb t ,( select 序号 from #tb where 标志='Y' )b
where
t.标志<>'Y'
and
substring(t.序号,0,len(b.序号)+1) in(b.序号)
create table #tb (阶层 int ,序号 varchar(50),标志 char(2))
insert into #tb values(1,'0010','')
insert into #tb values(2,'00100010','')
insert into #tb values(3,'001000100010','')
insert into #tb values(2,'00100020','Y')
insert into #tb values(3,'001000200010','' )--
insert into #tb values(4,'0010002000100010' ,'')--
insert into #tb values(5,'00100020001000100010' ,'')--
insert into #tb values(2,'00100030','')
insert into #tb values(2,'001000300010','')
insert into #tb values(2,'0010003000100010','Y')
insert into #tb values(2,'00100030001000100010','')--
select t.*
from #tb t ,( select 序号 from #tb where 标志='Y' )b
where
t.标志<>'Y'
and
substring(t.序号,0,len(b.序号)+1) in(b.序号)
/*阶层 序号 标志
----------- -------------------------------------------------- ----
3 001000200010
4 0010002000100010
5 00100020001000100010
2 00100030001000100010
(4 行受影响)*/