id name parentid qty
A AA 0 0
BB 业务部 A 20
CC 生产部 A 30
DD 财务部 A 40
EEE 市场一部 BB 50
FFF 市场二部 BB 60
GGG 成控部 DD 70
HHHH 客服部 FFF 80

上面数据,我如何用SQL语句查出以下数据。
只查三层部门的数据。

NAME1 NAME2 NAME3 QTY
业务部 20
生产部 30
财务部 40
业务部 市场一部 50
业务部 市场二部 60
财务部 成控部 70
业务部 市场二部 客服部 80

解决方案 »

  1.   

    Try:
    ;with cte as (
    select id,name1 = name ,name2 = cast('' as varchar(50)),name3 = cast('' as varchar(50)) ,qty from tab where parentid = 'A'
    union all
    select a.id,name1 = b.name1 ,name2 = a.name,name3 = cast('' as varchar(50)) ,a.qty from tab a,cte b
    where a.parentid = b.id
    and b.name2 = ''
    union all
    select a.id,name1 = b.name1 ,name2 = b.name2,name3 = a.name ,a.qty from tab a,cte b
    where a.parentid = b.id
    and b.name2 <> ''
    )
    select name1,name2,name3,qty from cte
      

  2.   

    经测试, 在SQL2008下可以使用,2000下不支持。