我即将实现此功能来计算一些数字。
CREATE FUNCTION [dbo].[funLookupFTE] (@PFID int) RETURNS
VARCHAR(20) AS BEGIN
DECLARE @NumberOfFTE AS VARCHAR(20)
SET @NumberOfFTE = (SELECT SUM(CASE WHEN Hours <= 20 THEN 0.5 WHEN Hours > 20 THEN 1 END) AS FTECount
FROM tblPractitioners
WHERE PFID =
@PFID)
RETURN @NumberOfFTE
END
只是想看看它是否是最优的,它不会自行解决问题。
答案 0 :(得分:4)
如果要在任何类型的查询中调用它,那么最好使用子查询而不是用户定义的函数。
例如:
SELECT * FROM tblPractioners P1
INNER JOIN
(
SELECT PFID, SUM(CASE WHEN Hours <= 20 THEN 0.5 WHEN Hours > 20 THEN 1 END)
AS FTECount
FROM tblPractitioners
GROUP BY PFID
) P2 ON P1.PFID = P2.PFID
用户定义函数的性能可能非常差,但您确实需要使用子查询或UDF来比较执行计划,以确定哪个更好。