我試圖通過T-SQL(在存儲過程中)實現一種在檢索行時將父值複製到子項中的方法。下面是一些示例數據:SELECT繼承層次結構中的父項值
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)
選擇數據如下:
SELECT ID, VALUE, LEVEL_NO
FROM TEST_LEVELS
結果:
+----+-------+----------+ | 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 | +----+-------+----------+
但我需要像這樣(值由父母繼承) :
+----+-------+----------+ | 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 | +----+-------+----------+
C這可以在不使用遊標的情況下實現(它也必須在SQL Server 2005上運行)?
完美的作品!謝謝 – Marie 2012-02-03 15:06:20
@ user1154189沒問題:) – 2012-02-03 15:10:50
@ user1154189,此查詢不使用'PARENT_ID'。向表中添加一行,例如:INSERT INTO @t(ID,VALUE,PARENT_ID,LEVEL_NO)VALUES(8,NULL,2,3)'並檢查它... – 2012-02-03 15:18:42