2
이 데이터는 재귀 테이블에 있으며이 계층 정보를 병합하고 싶습니다. 쿼리를 수행하여이 작업을 수행했지만 동일한 결과를 얻는 더 좋은 방법이 있는지 궁금해하고있었습니다.SQL Server 병합 계층 테이블
데이터 내가 가진 그 : 내가 필요
CREATE TABLE [dbo].[ElementosGeograficos_](
[IdElement] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NOT NULL,
[IdParentElement] [int] NULL,
[IdLevel] [int] NOT NULL,
CONSTRAINT [PK_ElementosGeograficos_]
PRIMARY KEY CLUSTERED ([IdElement] ASC)
GO
insert ElementosGeograficos_ (Name,IdParentElement,IdLevel) select 'Colombia',null,1
insert ElementosGeograficos_ (Name,IdParentElement,IdLevel) select 'Venezuela',null,1
insert ElementosGeograficos_ (Name,IdParentElement,IdLevel) select 'Cundinamarca',1,2
insert ElementosGeograficos_ (Name,IdParentElement,IdLevel) select 'Antioquia',1,2
insert ElementosGeograficos_ (Name,IdParentElement,IdLevel) select 'Valle',1,2
insert ElementosGeograficos_ (Name,IdParentElement,IdLevel) select 'Distrito Capital',2,2
insert ElementosGeograficos_ (Name,IdParentElement,IdLevel) select 'Bogota',3,3
insert ElementosGeograficos_ (Name,IdParentElement,IdLevel) select 'Medellin',4,3
insert ElementosGeograficos_ (Name,IdParentElement,IdLevel) select 'Cali',5,3
insert ElementosGeograficos_ (Name,IdParentElement,IdLevel) select 'Caracaas',6,3
쿼리 결과 : 내가 가진
- NUM 1 2 3
- 1 Colombia Null Null
- 2 Venezuela Null Null
- 3 Colombia Cundinamarca Null
- 4 Colombia Antioquia Null
- 5 Colombia Valle Null
- 6 Venezuela Distrito Capital Null
- 7 Colombia Cundinamarca Bogota
- 8 Colombia Antioquia Medellin
- 9 Colombia Valle Cali
- 10 Venezuela Distrito Capital Caracaas
검색어 :
SELECT
EG1.IdElementoGeografico, EG1.Nombre 'Pais',
EG2.Nombre 'Departamento', EG3.Nombre 'Ciudad'
FROM
ElementosGeograficos_ EG1
LEFT JOIN
ElementosGeograficos_ EG2 ON EG2.IdElementoGeografico = EG1.IdElementoPadre
LEFT JOIN
ElementosGeograficos_ EG3 ON EG3.IdElementoGeografico = EG2.IdElementoPadre
WHERE
EG1.IdNivelGeografico = 1
UNION
SELECT
EG1.IdElementoGeografico, EG2.Nombre 'Pais',
EG1.Nombre 'Departamento', EG3.Nombre 'Ciudad'
FROM
ElementosGeograficos_ EG1
LEFT JOIN
ElementosGeograficos_ EG2 ON EG2.IdElementoGeografico = EG1.IdElementoPadre
LEFT JOIN
ElementosGeograficos_ EG3 ON EG3.IdElementoGeografico = EG2.IdElementoPadre
WHERE
EG1.IdNivelGeografico = 2
UNION
SELECT
EG1.IdElementoGeografico, EG3.Nombre 'Pais',
EG2.Nombre 'Departamento', EG1.Nombre 'Ciudad'
FROM
ElementosGeograficos_ EG1
LEFT JOIN
ElementosGeograficos_ EG2 ON EG2.IdElementoGeografico = EG1.IdElementoPadre
LEFT JOIN
ElementosGeograficos_ EG3 ON EG3.IdElementoGeografico = EG2.IdElementoPadre
WHERE
EG1.IdNivelGeografico = 3
감사합니다. Conrad Frix – foluis