SQL 不使用递归,而对地区等级进行扁历

地区表结构

ID   ParentID Name

1   0  A1

2   1  A1-1

......

/* 临时表 */

create table #T_DQ(
  ID integer null,
  ParentID integer null,
  Name varchar(50) null,
  Grade integer null,  /* 级别 */
  State varchar(10) null  /* 1:未处理;2:已处理 */
)

/* SQL 为查询地区,包括子地区 */

Insert into #T_DQ (ID, ParentID, Name, Grade, State)
  select ID, ParentID, Name, 1, '1' from T_DQ where ParentID=@Area  /* 需要查询的地区 */

/* 循环插入子地区 */
Select @ID=Min(ID) from #T_DQ
while @ID is not null
begin
  Select @Grade=Grade from #T_DQ where ID=@ID
  Insert into #T_DQ (ID, ParentID, Name, Grade,State)
    select ID, ParentID, Name, @Grade+1, '1' from #T_DQ1 where ParentID=@ID
  Update #T_DQ set State='2' where ID=@ID
  Select @ID=Min(ID) from #T_DQ where State<>'2'
end

 

select * from #T_DQ

 

希望能对大家有帮助!

posted on 2009-01-04 14:43  Yanyyx 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/yanyyx/archive/2009/01/04/1368124.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值