自递归SQL服务器数据库table创建树状结构,为此创建模型,并在Devexpress中使用此数据
Self recursive SQL Server database table to create a tree structure, create model for this , and using this data in Devexpress
我有 location
和 employee
数据库 table。我想显示所有位置(从根位置到所有子位置)和这些位置中存在的项目。我决定使用 Devexpress 报告来创建包含此信息的报告。这个项目是用 ASP.NET MVC 实现的。我需要帮助,你能帮我完成这个项目吗?
我的 Location
table 在 SQL 服务器看起来像:
- parentid
- childid
- 姓名
和我的Employee
table
- id
- locationid(位置 table)
- 姓名
- 性别
- professionid(连接到另一个职业table:1:行政人员,2:technician ...等等)
我想在报告中创建这样的结果:
Apple
Apple America
Apple New York
...
Name1 Surname1 gender1 profession1 ...
Name2 Surname2 gender2 profession2 ...
Apple Boston
Name3 Surname3 gender3 profession3 ...
我应该创建什么模型来实现这个结构,你能给我一些建议吗,我以错误的方式检索数据。
要获取递归数据,您可以像这样使用 recursive common table expression:
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];
然后使用这些列,您可以以所需的方式激活数据。
我有 location
和 employee
数据库 table。我想显示所有位置(从根位置到所有子位置)和这些位置中存在的项目。我决定使用 Devexpress 报告来创建包含此信息的报告。这个项目是用 ASP.NET MVC 实现的。我需要帮助,你能帮我完成这个项目吗?
我的 Location
table 在 SQL 服务器看起来像:
- parentid
- childid
- 姓名
和我的Employee
table
- id
- locationid(位置 table)
- 姓名
- 性别
- professionid(连接到另一个职业table:1:行政人员,2:technician ...等等)
我想在报告中创建这样的结果:
Apple
Apple America
Apple New York
...
Name1 Surname1 gender1 profession1 ...
Name2 Surname2 gender2 profession2 ...
Apple Boston
Name3 Surname3 gender3 profession3 ...
我应该创建什么模型来实现这个结构,你能给我一些建议吗,我以错误的方式检索数据。
要获取递归数据,您可以像这样使用 recursive common table expression:
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];
然后使用这些列,您可以以所需的方式激活数据。