如何在函数中的表中获取记录集合?

时间:2013-04-27 21:32:51

标签: sql sql-server

我正在尝试创建一个接收Patient表主键的函数。然后,对于该密钥,如果应该找到该患者的所有订单。然后,从该记录集合中,它应该获得所使用的耗材及其数量,并使用Supplies表来计算总成本并返回该值。

我不知道如何获得所有订单以及如何使用它们来获取耗材和数量。我知道我可以通过使用一个简单的select语句来获取它们,但我只是不知道如何在函数中实现它,因为它需要返回一个值。有人有建议吗?我是在SQL中编写代码的新手。我正在使用MS SQL Server。

非常感谢任何帮助。

Patient
----------
PatientNo
First,
Last,
Address


OrderTable
----------
OrdNo,
Date,
PatientNo,
Address

OrdLineTable
----------
OrdNo,
SupplyNo,
Quantity


SupplyObject
----------
SupplyNo,
Price

1 个答案:

答案 0 :(得分:1)

我不确定您的问题是关于如何创建函数或查询的样子。我会回答后者。

让我假设您有一个合理的数据结构,其中包含四个表:Patients(未使用); Operations(每位患者的手术清单); OperationSupplies(每项操作的耗材清单);和Supplies(关于每种供应的信息)。

select coalesce(sum(os.quantity * s.cost), 0) as TotalCost
from Operations o left outer join
     OperationSupplies os
     on os.OperationId = o.OperationId left outer join
     Supplies s
     on s.SupplyId = os.SupplyId
where o.PatientId = @PatientId

这是作为函数的结构:

create function xxx (@PatientId int)
returns float
as
begin
    declare @val float;

    select @val = coalesce(sum(os.quantity * s.cost), 0) as TotalCost
    from Operations o left outer join
         OperationSupplies os
         on os.OperationId = o.OperationId left outer join
         Supplies s
         on s.SupplyId = os.SupplyId
    where o.PatientId = @PatientId;
    return(@val);
end;