0

중복 : CTE는 그래서 같은 간단한 데이터 구조에 대한 참조

ID parentID Name  (Table: VehicleType) 
1     Vehicle 
2  1   Small 
3  2   Car 
4  2   Motorcycle 
5  1   Medium 
6  5   Pickup 

ID ItemType Name  (Table: Vehicle) 
1  3   Golf 
2  4   125 

가 CTE는 같은 결과를 사용하는 것이 가능 : 나는 모든 발견 차량 유형에 대한 레지스터를 만들

VehicleType Name 
Vehicle  Golf 
Small   Golf 
Car   Golf 
Vehicle  125 
Small   125 
Motorcycle 125 

, 성공없이 모든 것을 시도했다.

+0

표'VehicleType' 나에게 이상한 것 같다 사용할 수 있습니다. 어떤 정보를 제공합니까? –

답변

1

당신은 재귀 CTE http://technet.microsoft.com/en-us/library/ms186243(v=sql.105).aspx

;WITH cteRecursiveTypes as 
(
    SELECT baseTypeID = t.ID, typeID = t.ID, t.parentID, VehicleType = t.Name, recLevel = 1 
    FROM VehicleType t 

    UNION ALL 

    SELECT t.baseTypeID, parentT.ID, parentT.parentID as parentID, VehicleType = parentT.Name, recLevel = t.recLevel + 1 
    FROM cteRecursiveTypes t 
    INNER JOIN VehicleType parentT on t.parentID = parentT.ID 

) 
SELECT t.VehicleType, v.Name, recLevel = dense_rank() over(partition by t.baseTypeID order by t.recLevel desc) - 1 
FROM Vehicle v 
INNER JOIN cteRecursiveTypes t on v.ItemType = t.baseTypeID 
ORDER BY 2,1 
; 
+0

Takes Bate, 재귀 적 수준을 표시하는 데 필요한 단서가 있습니까? 예 : 자동차, 골프 = 2 단계 | Vehicle, 125 = Level 0 – Alexandre

+1

나는 당신이 원하는 것을 줄 것이라고 생각하는 "recLevel"칼럼을 포함하도록 대답을 업데이트했다. – BateTech