2014-02-14 44 views
0

我有兩個表,如下所示:一個是部門,另一個是員工。每個部門都有幾名員工。這裏是表格定義:返回SQL服務器中的複雜數據類型

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

聽起來像你應該使用ORM - 對象 - 關係映射 - 就像實體框架。這完全是**這些工具的優點 - 將關係表的某些笨重的行/列轉化爲友善的.NET對象 –

回答

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與上一行不同的任何行。