2015-02-23 198 views
0

首先感謝您的幫助,我對SQL方面的專家,也許做一個很基本的問題遞歸SQL查詢

我的數據庫是SQL Server 2012中

我與字段的表所示下面

servicerequestareaid - enumtypeid    -value    -ordinal - parentid 
69 - D115C073-613F-F8C4-04A1-DE63B28D2496 - Servidor Exchange - 0   - 68 
70 - 3A09DA42-B33E-05EA-C2CB-167FECBDE346 - Rol CAS   - 0   - 69 
71 - E9AFC8C0-76F3-2B92-38A3-7A5B0F9FCD07 - Perimetral  - 0   - 70 
72 - 925F6D8C-EA24-798F-3D6C-EB64AC436D6F - Asegurado   - 0   - 71 

我需要servicerequestareaId,enumtypeId和parentId的字段的值,該記錄

我開始servicerequestareaid的值,

parentId的值對應於存儲在所述servicerequestareaid場到另一個記錄重複

這個過程中的值,直到存儲在parentId的值具有組存儲值必須的後等於1

顯示

創建兩個光標用於此目的,但並不想這樣做的,應該habrer一個更有效的方式做到

![光標] [2]



感謝您的幫助

+0

你想只將整個桌子縫在一起?或者你得到一個特定的servicerequestareaId開始? – 2015-02-23 13:06:57

+0

thx billI有一個servicerequestareaid開始是一個變量thx rhys我的數據庫是SQL Server 2012 – Heretic 2015-02-23 13:09:57

回答

1

做到在遞歸CTE:

DECLARE @t TABLE(id INT, parent_id int) 

INSERT INTO @t VALUES 
(1, null), 
(2, null), 
(3, 1), 
(4, 3), 
(5, 2), 
(6, 2), 
(7, 5) 


DECLARE @id INT = 7 

;WITH cte AS(
SELECT * FROM @t WHERE id = @id 
UNION ALL 
SELECT t.* FROM @t t JOIN cte ON t.id = cte.parent_id 
) 
SELECT * FROM cte 

輸出:

id parent_id 
7 5 
5 2 
2 NULL 

我想你會很容易地調整給你的表格。