Id | Name | Parent_id | Audit_start | Audit_end |
1 | Client1 | <null> | 2008.08.02 | <null> |
2 | Division1 | 1 | 2008.08.02 | <null> |
3 | Division2 | 2 | 2008.08.02 | <null> |
----------------------------------------------------------------------
declare @clientId int
set @clientId = 1
-----------------------------------------------------------------
--get all subclients belong to this client including itself.
declare @tbl_clients table
(
client_id int,
client_name varchar(100),
level int
)
----------------------------------------------------------
--insert itself
insert into @tbl_clients (client_id,client_name,level)
select @clientId,name,0
from clients
where id= @clientId and audit_end is null
--insert its children
declare @level int
set @level=1
insert into @tbl_clients
select id,name,@level from clients where parent_id=@clientId and audit_end is null
while @@rowcount>0
begin
set @level=@level+1
insert into @tbl_clients
select clients.id, clients.name,@level
from clients,@tbl_clients tmp
where clients.parent_id=tmp.client_id
and tmp.level=@level-1
and clients.audit_end is null
end
select * from @tbl_clients
select * from clients where audit_end is null