BOM算法问题

wofan 2010-04-15 02:25:42
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,@levelno

WHILE @@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
END

CLOSE BOM
DEALLOCATE BOM
...全文
217 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yhtapmys 2010-04-15
  • 打赏
  • 举报
回复
友情UP
htl258_Tony 2010-04-15
  • 打赏
  • 举报
回复
SELECT ID,
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
guyixin 2010-04-15
  • 打赏
  • 举报
回复
学习,看不懂
guohua1205 2010-04-15
  • 打赏
  • 举报
回复
学习中!
csdyyr 2010-04-15
  • 打赏
  • 举报
回复
SELECT ID,
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
csdyyr 2010-04-15
  • 打赏
  • 举报
回复
DECLARE @TB TABLE([ID] INT, [parentid] INT, [level] INT, [level2] VARCHAR(6), [bomid] INT)
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 行受影响)
*/

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧