ID parentid level level bomid
----------------------------------------------------
487 0 1 + 275
488 487 2 ++ 41
489 488 3 +++ 2098
490 489 4 ++++ 824
491 490 5 +++++ 825
492 491 6 ++++++ 784
493 487 2 ++ 41
494 487 2 ++ 41
495 487 2 ++ 41
496 487 2 ++ 41
497 496 3 +++ 2099
498 497 4 ++++ 823
499 498 5 +++++ 827
500 499 6 ++++++ 785
501 0 1 + 275
502 0 1 + 275根据level将ID填入parentid中,以上是已经填好的
我写了一个只能填一部分id 493-496无法算了update hzkf_xx set parentid=levelno-1
declare @id nvarchar(20)
declare @parentid nvarchar(20)
declare @levelno int
declare @cid int
declare @level1 int
declare @tlevel int
declare @tparentid int
DECLARE BOM CURSOR FOR
select ID,ParentID,levelno
from hzkf_xx
open BOM
FETCH NEXT FROM BOM
into @id,@parentid,@levelnoWHILE @@FETCH_STATUS = 0
BEGIN if (@levelno=1)
begin
set @tparentid=@parentid
set @tlevel=@id
set @cid=@id
set @level1=@levelno
--print @id
end
if (@levelno>1)
begin
if (@levelno>@level1)
begin
update hzkf_xx set parentid=@cid where id=@id
set @cid=@id
set @level1=@levelno
end end
if (@levelno<=@level1)
begin
set @cid=@id
set @level1=@levelno
end
FETCH NEXT FROM BOM
into @id,@parentid,@levelno
ENDCLOSE BOM
DEALLOCATE BOM
----------------------------------------------------
487 0 1 + 275
488 487 2 ++ 41
489 488 3 +++ 2098
490 489 4 ++++ 824
491 490 5 +++++ 825
492 491 6 ++++++ 784
493 487 2 ++ 41
494 487 2 ++ 41
495 487 2 ++ 41
496 487 2 ++ 41
497 496 3 +++ 2099
498 497 4 ++++ 823
499 498 5 +++++ 827
500 499 6 ++++++ 785
501 0 1 + 275
502 0 1 + 275根据level将ID填入parentid中,以上是已经填好的
我写了一个只能填一部分id 493-496无法算了update hzkf_xx set parentid=levelno-1
declare @id nvarchar(20)
declare @parentid nvarchar(20)
declare @levelno int
declare @cid int
declare @level1 int
declare @tlevel int
declare @tparentid int
DECLARE BOM CURSOR FOR
select ID,ParentID,levelno
from hzkf_xx
open BOM
FETCH NEXT FROM BOM
into @id,@parentid,@levelnoWHILE @@FETCH_STATUS = 0
BEGIN if (@levelno=1)
begin
set @tparentid=@parentid
set @tlevel=@id
set @cid=@id
set @level1=@levelno
--print @id
end
if (@levelno>1)
begin
if (@levelno>@level1)
begin
update hzkf_xx set parentid=@cid where id=@id
set @cid=@id
set @level1=@levelno
end end
if (@levelno<=@level1)
begin
set @cid=@id
set @level1=@levelno
end
FETCH NEXT FROM BOM
into @id,@parentid,@levelno
ENDCLOSE BOM
DEALLOCATE BOM
解决方案 »
- 异地SQL数据库查询一个表
- 这是什么错误:输入的值与数据类型不一致,或者此值与列的长度不一致?
- 关于循环删除的问题,在线等~
- 有谁知道,sina网在注册时用户名被占用,如何算出可用的未占用用户名.
- 判断Sql Server 表中的字段为计算字段
- 请问额为何改过操作系统的密码后SQL Server2000就不能够运行了?
- 求教:这样一个视图怎么建?一个招生计划表和一个入学考试成绩表,建一个视图分别得出相应分数线!
- 一个复杂sql语句的书写问题
- 两个表中的数量进行比较,根据不同条件向C表中插入数据,如何处理?数据已经写好,只管用就可以了
- 一个简单的存储过程问题,请各位探讨一下。
- 求助:jsp报表的sql组合
- 触发器的问题(高手请进)
INSERT @TB
SELECT 487, 0, 1, '+', 275 UNION ALL
SELECT 488, 487, 2, '++', 41 UNION ALL
SELECT 489, 488, 3, '+++', 2098 UNION ALL
SELECT 490, 489, 4, '++++', 824 UNION ALL
SELECT 491, 490, 5, '+++++', 825 UNION ALL
SELECT 492, 491, 6, '++++++', 784 UNION ALL
SELECT 493, 487, 2, '++', 41 UNION ALL
SELECT 494, 487, 2, '++', 41 UNION ALL
SELECT 495, 487, 2, '++', 41 UNION ALL
SELECT 496, 487, 2, '++', 41 UNION ALL
SELECT 497, 496, 3, '+++', 2099 UNION ALL
SELECT 498, 497, 4, '++++', 823 UNION ALL
SELECT 499, 498, 5, '+++++', 827 UNION ALL
SELECT 500, 499, 6, '++++++', 785 UNION ALL
SELECT 501, 0, 1, '+', 275 UNION ALL
SELECT 502, 0, 1, '+', 275
SELECT ID,
CASE WHEN [parentid]=0 THEN 0 ELSE (SELECT TOP 1 ID FROM @TB WHERE ID<T.ID AND LEVEL=T.LEVEL-1 ORDER BY ID DESC) END AS PID,
LEVEL,
LEVEL2,
BOMID
FROM @TB AS T
/*
ID PID LEVEL LEVEL2 BOMID
----------- ----------- ----------- ------ -----------
487 0 1 + 275
488 487 2 ++ 41
489 488 3 +++ 2098
490 489 4 ++++ 824
491 490 5 +++++ 825
492 491 6 ++++++ 784
493 487 2 ++ 41
494 487 2 ++ 41
495 487 2 ++ 41
496 487 2 ++ 41
497 496 3 +++ 2099
498 497 4 ++++ 823
499 498 5 +++++ 827
500 499 6 ++++++ 785
501 0 1 + 275
502 0 1 + 275(16 行受影响)
*/
CASE WHEN LEVEL=1 THEN 0 ELSE (SELECT TOP 1 ID FROM @TB WHERE ID<T.ID AND LEVEL=T.LEVEL-1 ORDER BY ID DESC) END AS PID,
LEVEL,
LEVEL2,
BOMID
FROM @TB AS T
PID=ISNULL((SELECT TOP 1 ID FROM tb WHERE ID<T.ID AND LEVEL=t.LEVEL-1 ORDER BY ID DESC),0),
LEVEL,
LEVEL2,
BOMID
FROM tb t