Возможно ли создать представление на основе иерархии/cte?Создать представление на основе иерархии/используется CTE
Я видел пример того, как сгенерировать набор результатов по ссылке recursive query.
Я приложил ddl и заявление.
Спасибо,
Элмера
CREATE TABLE [dbo].[XHR_PERSON](
[PERSON_ID] [bigint] NOT NULL,
[LAST_NAME] [varchar](100) NOT NULL,
[FIRST_NAME] [varchar](100)
,EFFECTIVE_START_DATE Date
,EFFECTIVE_END_DATE Date)
CREATE TABLE [dbo].[XHR_EMPLOYMENT](
[PERSON_ID] [bigint] NOT NULL,
[EMPLOYEE_NUMBER] [varchar](100) NULL,
[SUPERVISOR_ID] [bigint] NULL
,EFFECTIVE_START_DATE Date
,EFFECTIVE_END_DATE Date)
insert into XHR_PERSON
select 1, 'SMY', null, '1990-01-01','9999-12-31' UNION ALL
select 2, 'JSB',null, '1990-01-01','9999-12-31' union all
select 3, 'LFG',null, '1990-01-01','9999-12-31' union all
select 4, 'Elmer',null, '1990-01-01','9999-12-31' union all
select 5, 'Jon',null, '1990-01-01','9999-12-31' union all
select 6, 'Anne',null, '1990-01-01','9999-12-31' union all
select 7, 'Teddy',null, '1990-01-01','9999-12-31' union all
select 8, 'Alex',null , '1990-01-01','9999-12-31'union all
select 9, 'Jeff',null, '1990-01-01','9999-12-31'
update XHR_PERSON set first_name = 'A'
insert into XHR_EMPLOYMENT
select 1, '111',null, '1990-01-01','9999-12-31' UNION ALL
select 2, '222',1, '1990-01-01','9999-12-31' union all
select 3, '333',1, '1990-01-01','9999-12-31' union all
select 4, '444',2, '1990-01-01','9999-12-31' union all
select 5, '555',2, '1990-01-01','9999-12-31' union all
select 6, '666',4, '1990-01-01','9999-12-31' union all
select 7, '777',3, '1990-01-01','9999-12-31' union all
select 8, '888',3, '1990-01-01','9999-12-31' union all
select 9, '999',8, '1990-01-01','9999-12-31'
CREATE VIEW dbo.HR_DIRECTREPORTSV as
WITH xxDirectReports (Supervisor_id, Person_id, Employee_number, Employee_name, Supervisor_Empno, Supervisor_Name, Level1)
AS
(
SELECT hre.Supervisor_id
,hre.Person_id
,hre.Employee_number
,hrp.last_name+', '+hrp.first_name Employee_Name
,hrpx.employee_number Supervisor_Empno
,hrpx.fullname Supervisor_Name
,0 AS Level1
FROM dbo.xhr_employment AS hre left join (select hrp1.person_id,hre1.employee_number ,(hrp1.last_name+', '+hrp1.first_name) as fullname
from dbo.xHR_PERSON hrp1
,dbo.xhr_employment hre1
where hrp1.person_id = hre1.person_id
AND getdate() between hrp1.effective_start_date
and hrp1.effective_end_date
) hrpx on hre.supervisor_id = hrpx.person_id
,dbo.xHR_PERSON AS hrp
WHERE hre.person_id = hrp.person_id
AND GETDATE() between hrp.effective_start_date and hrp.effective_end_date
AND GETDATE() between hrp.effective_start_date and hrp.effective_end_date
--AND hrpx.person_id = 1
UNION ALL
SELECT hre.Supervisor_id
,hre.Person_id
,hre.Employee_number
,hrp.last_name+', '+hrp.first_name Employee_Name
,hrpx.employee_number Supervisor_Empno
,hrpx.fullname Supervisor_Name
,Level1+1
FROM dbo.xhr_employment AS hre inner join (select hrp1.person_id
,hre1.employee_number
,(hrp1.last_name+', '+hrp1.first_name) as fullname
from dbo.xHR_PERSON hrp1
,dbo.xhr_employment hre1
where hrp1.person_id = hre1.person_id
AND getdate() between hrp1.effective_start_date
and hrp1.effective_end_date
) hrpx on hre.supervisor_id = hrpx.person_id
INNER JOIN xxDirectReports AS xx ON hre.Supervisor_id = xx.Person_id
,dbo.xHR_PERSON AS hrp
WHERE hre.person_id = hrp.person_id
AND GETDATE() between hrp.effective_start_date and hrp.effective_end_date
AND GETDATE() between hrp.effective_start_date and hrp.effective_end_date)
Извините за вопрос, но: вы пробовали? (Если да и не удалось: какая ошибка?) – Tobiasopdenbrouw
Привет, Тобиасопденбрув, сейчас. я вставил «create view dbo.ReportingV как» перед «WITH xxDirecReports». Я обновляю нить после выполнения. Спасибо .. – Elmer
Ждем результатов. – Tobiasopdenbrouw