我有两个表格如下:一个是部门,另一个是员工。每个部门都有几名员工。这是表定义:
Create table [dbo].[Department]
(
ID int not null,
Name varchar(100) not null,
revenue int not null
)
Create table [dbo].[Employee]
(
ID int not null,
DepartmentID int not null,--This is foreign key to Department
Name varchar(100) not null,
Level int not null
)
现在,如果部门收入超过某个值,我想查询所有部门的员工。因此结果将包含一个部门列表。对于每个部门,它还应包含员工清单。
在我们的客户端,我们使用c#来检索数据,这里是界面:
public List<Department> GetHighRevenueDepartmentWithEmployee(int revenueBar)
{
throw new NotImplementedException();
}
我的问题是:是否可以在一个查询/存储过程中获得复合结果。可以使用一个存储过程多次查询,但是整个数据必须一次性返回给客户端。(这是性能原因)我们如何实现这一点?我知道我们可以在这里定义表值类型,但我不能定义一个表值类型,它包含另一个表值作为列内部。
答案 0 :(得分:1)
通常,您只需返回包含两个表中所有列的结果集:
SELECT
d.ID as DepartmentID,d.Name as DepartmentName,d.Revenue,
e.ID as EmployeeID,e.Name as EmployeeName,e.Level
FROM
Department d
inner join
Employee e
on d.ID = e.DepartmentID
WHERE
d.revenue > @value
ORDER BY
d.ID
现在,为部门返回的数据将重复多次 - 每位员工一次。但那没关系。只需为每个新部门使用第一行,并在其余行中忽略它。那将是结果集的第一行,以及DepartmentID
与前一行不同的任何行。