id flbm parent flmc
1 00 0 五金
2 0010 1 螺丝
3 001000 2 螺母
4 00100001 3 钢丝
5 01 0 办公用品
6 0100 5 笔
7 0101 5 纸
8 010000 6 尺
这里parent和id有些关联,了解树结构应该能看懂
我想查询得到bm列为
id flbm parent flmc bm
1 00 0 五金 00
2 0010 1 螺丝 00
3 001000 2 螺母 00
4 00100001 3 钢丝 00
5 01 0 办公用品 01
6 0100 5 笔 01
7 0101 5 纸 01
8 010000 6 尺 01
1 00 0 五金
2 0010 1 螺丝
3 001000 2 螺母
4 00100001 3 钢丝
5 01 0 办公用品
6 0100 5 笔
7 0101 5 纸
8 010000 6 尺
这里parent和id有些关联,了解树结构应该能看懂
我想查询得到bm列为
id flbm parent flmc bm
1 00 0 五金 00
2 0010 1 螺丝 00
3 001000 2 螺母 00
4 00100001 3 钢丝 00
5 01 0 办公用品 01
6 0100 5 笔 01
7 0101 5 纸 01
8 010000 6 尺 01
-- -----------t_mac 小编-------------
---希望有天成为大虾----
-- =========================================IF OBJECT_ID('tb') IS NOT NULL
DROP TABLE tb
GO
CREATE TABLE tb(id int, flbm varchar(30),parent int, flmc varchar(10))
go
insert tb SELECT
1 , '00' , 0 , '五金' UNION ALL SELECT
2 , '0010' , 1 , '螺丝' UNION ALL SELECT
3 , '001000' , 2 , '螺母' UNION ALL SELECT
4 , '00100001' , 3 , '钢丝' UNION ALL SELECT
5 , '01' , 0 , '办公用品 'UNION ALL SELECT
6 , '0100' , 5 , '笔 'UNION ALL SELECT
7 , '0101' , 5 , '纸' UNION ALL SELECT
8 , '010000' , 6 , '尺'
go
select*,
bm=case when parent=0 then LEFT(flbm,2)
when parent<>0 and parent in (select ID from tb where left(t.flbm,2)=left(flbm,2) ) then LEFT(flbm,2) end
from tb t
go
/*------------
id flbm parent flmc bm
----------- ------------------------------ ----------- ---------- ----
1 00 0 五金 00
2 0010 1 螺丝 00
3 001000 2 螺母 00
4 00100001 3 钢丝 00
5 01 0 办公用品 01
6 0100 5 笔 01
7 0101 5 纸 01
8 010000 6 尺 01(8 行受影响)
-------*/
-- Author : liangCK 小梁
-- Comment: 小梁 爱 兰儿
-- Date : 2009-07-22 22:56:41
-------------------------------------------
--> 生成测试数据: @T
DECLARE @T TABLE (id INT,flbm VARCHAR(8),parent INT,flmc VARCHAR(8))
INSERT INTO @T
SELECT 1,'00',0,'五金' UNION ALL
SELECT 2,'0010',1,'螺丝' UNION ALL
SELECT 3,'001000',2,'螺母' UNION ALL
SELECT 4,'00100001',3,'钢丝' UNION ALL
SELECT 5,'01',0,'办公用品' UNION ALL
SELECT 6,'0100',5,'笔' UNION ALL
SELECT 7,'0101',5,'纸' UNION ALL
SELECT 8,'010000',6,'尺'--SQL查询如下:SELECT *,
bm=(SELECT MIN(flbm) FROM @T
WHERE A.flbm LIKE flbm + '%')
FROM @T AS A/*
id flbm parent flmc bm
----------- -------- ----------- -------- --------
1 00 0 五金 00
2 0010 1 螺丝 00
3 001000 2 螺母 00
4 00100001 3 钢丝 00
5 01 0 办公用品 01
6 0100 5 笔 01
7 0101 5 纸 01
8 010000 6 尺 01(8 row(s) affected)
*/
-- Author :fredrickhu(小F 向高手学习)
-- Date :2009-07-22 23:00:59
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb]([id] int,[flbm] varchar(8),[parent] int,[flmc] varchar(8))
insert [tb]
select 1,'00',0,'五金' union all
select 2,'0010',1,'螺丝' union all
select 3,'001000',2,'螺母' union all
select 4,'00100001',3,'钢丝' union all
select 5,'01',0,'办公用品' union all
select 6,'0100',5,'笔' union all
select 7,'0101',5,'纸' union all
select 8,'010000',6,'尺'
--------------开始查询--------------------------select id,flbm,parent,flmc,
(case when left(flbm,2)='00' then '00'
when left(flbm,2)='01' then '01' end) as bm
from [tb]
----------------结果----------------------------
/*
id flbm parent flmc bm
----------- -------- ----------- -------- ----
1 00 0 五金 00
2 0010 1 螺丝 00
3 001000 2 螺母 00
4 00100001 3 钢丝 00
5 01 0 办公用品 01
6 0100 5 笔 01
7 0101 5 纸 01
8 010000 6 尺 01(所影响的行数为 8 行)
*/