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.   

    -- =========================================
    -- -----------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 行受影响)
    -------*/
      

  2.   

    -------------------------------------------
    --  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)
    */
      

  3.   

    ----------------------------------------------------------------
    -- 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 行)
    */