Саморекурсивная таблица базы данных SQL Server для создания древовидной структуры, создания модели для этого и использования этих данных в Devexpress. - PullRequest
0 голосов
/ 22 сентября 2019

У меня есть location и employee таблицы базы данных.Я хочу показать все местоположения (от корневого местоположения до всех дочерних местоположений) и элементы, которые существуют в этих местоположениях.Я решил использовать отчетность Devexpress для создания отчета с этой информацией.Этот проект реализован с использованием ASP.NET MVC.Мне нужна помощь, можете ли вы помочь мне с этим проектом?

Моя Location таблица в SQL Server выглядит следующим образом:

  • parentid
  • childid
  • имя

и моя таблица Employee

  • идентификатор
  • locationid (для таблицы местоположений)
  • имя
  • пол
  • profidid (связано с таблицей другой профессии: 1: руководитель, 2: техник и т. Д.)

Я хочу создать такой отчет в виде отчетов:

Apple
    Apple America
          Apple New York
               ...
                  Name1  Surname1    gender1  profession1   ... 
                  Name2  Surname2    gender2  profession2   ... 

           Apple Boston 
                  Name3  Surname3   gender3  profession3  ... 

Какую модель мне следует создать для реализации этой структуры, можете ли вы дать мне несколько советов, я неверно извлекаю данные.

1 Ответ

0 голосов
/ 22 сентября 2019

Для получения рекурсивных данных вы можете использовать рекурсивное общее табличное выражение , например:

DECLARE @DataSource TABLE
(
    [parentid] INT
   ,[childid] INT
   ,[name] VARCHAR(16)
);

INSERT INTO @DataSource ([parentid], [childid], [name])
VALUES (NULL, 10, 'parent A')
      ,(10, 11, 'child A1')
      ,(10, 12, 'child A2')
      ,(NULL, 13, 'parent B')
      ,(13, 14, 'sub-parent B1')
      ,(13, 15, 'sub-parent B2')
      ,(14, 16, 'child B2 - C1')
      ,(14, 17, 'child B2 - C2');

WITH RecursiveDataSource AS
(
    SELECT *
          ,1 AS [Level]
          ,ROW_NUMBER() OVER (ORDER BY(SELECT 1)) AS [FamilyID]
    FROM @DataSource 
    WHERE [parentid] IS NULL
    UNION ALL
    SELECT DS.*
          ,RDS.[Level] + 1 
          ,RDS.[FamilyID]
    FROM RecursiveDataSource RDS
    INNER JOIN @DataSource DS
        ON RDS.[childid] = DS.[parentid]
)
SELECT *
FROM RecursiveDataSource
ORDER BY [FamilyID] 
        ,[Level];

enter image description here

Затем используйте этистолбцы вы можете оживить данные по желанию.

...