22,301
社区成员




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
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 行受影响)
*/