I’m trying to acheive through T-SQL (in a stored procedure) a way to copy a value from a parent into the child when retrieving rows. Here is some example data:
DROP TABLE TEST_LEVELS
CREATE TABLE TEST_LEVELS(
ID INT NOT NULL
,VALUE INT NULL
,PARENT_ID INT NULL
,LEVEL_NO INT NOT NULL
)
INSERT INTO TEST_LEVELS (ID, VALUE, PARENT_ID, LEVEL_NO) VALUES (1, 10000, NULL, 1)
INSERT INTO TEST_LEVELS (ID, VALUE, PARENT_ID, LEVEL_NO) VALUES (2, NULL, 1, 2)
INSERT INTO TEST_LEVELS (ID, VALUE, PARENT_ID, LEVEL_NO) VALUES (3, NULL, 2, 3)
INSERT INTO TEST_LEVELS (ID, VALUE, PARENT_ID, LEVEL_NO) VALUES (4, 20000, NULL, 1)
INSERT INTO TEST_LEVELS (ID, VALUE, PARENT_ID, LEVEL_NO) VALUES (5, NULL, 4, 2)
INSERT INTO TEST_LEVELS (ID, VALUE, PARENT_ID, LEVEL_NO) VALUES (6, 25000, 5, 3)
INSERT INTO TEST_LEVELS (ID, VALUE, PARENT_ID, LEVEL_NO) VALUES (7, NULL, 6, 4)
Selecting the data as follows:
SELECT ID, VALUE, LEVEL_NO
FROM TEST_LEVELS
results in:
+----+-------+----------+ | ID | VALUE | LEVEL_NO | +----+-------+----------+ | 1 | 10000 | 1 | | 2 | NULL | 2 | | 3 | NULL | 3 | | 4 | 20000 | 1 | | 5 | NULL | 2 | | 6 | 25000 | 3 | | 7 | NULL | 4 | +----+-------+----------+
But I need something like this (values are inherited by the parent):
+----+-------+----------+ | ID | VALUE | LEVEL_NO | +----+-------+----------+ | 1 | 10000 | 1 | | 2 | 10000 | 2 | | 3 | 10000 | 3 | | 4 | 20000 | 1 | | 5 | 20000 | 2 | | 6 | 25000 | 3 | | 7 | 25000 | 4 | +----+-------+----------+
Can this be achieved without using cursors (it must also run on SQL Server 2005)?
One way to do it: