具有多个功能的地方

时间:2013-09-14 08:23:37

标签: sql sql-server sql-server-2008-r2 conditional-statements where

我需要有一个函数,其中包含来自其他表的多个WHERE条件:

CREATE FUNCTION [dbo].[Table2](@Id INT) 
RETURNS money
AS 
BEGIN
 DECLARE @cost money
 SELECT @koszt = SUM(Value)
 FROM [dbo].[Cost]
  WHERE ([ID_CostCategory] --I need to add here one more condition [ID_Department]
  return @cost
END

请帮助如何获得它。

2 个答案:

答案 0 :(得分:0)

如果我理解你的评论,可能会为你的函数引入第二个参数:

CREATE FUNCTION [dbo].[Table2](@CategoryId INT, @DepartmentId INT) 
   RETURNS money
AS 
BEGIN
   DECLARE @cost money
   SELECT @cost = SUM(Value)
   FROM [dbo].[Cost]
   WHERE ([ID_CostCategory] = @CategoyId AND [ID_Department] = @DepartmentId)
   return @cost
END

答案 1 :(得分:0)

首先,出于性能原因,我会使用内联UDF而不是标量函数。

其次,有两种选择:

1)显示每个部门总数的功能

CREATE FUNCTION [dbo].[Table2](@pID_CostCategory INT) 
RETURNS TABLE
AS 
RETURN
    SELECT  [ID_Department], SUM(Value) AS koszt
    FROM    [dbo].[Cost]
    WHERE   [ID_CostCategory] = @pID_CostCategory
    GROUP BY[ID_Department];
GO  

2)具有两个参数的函数,第二个参数是可选的

CREATE FUNCTION [dbo].[Table2](@pID_CostCategory INT, @pID_Department INT=NULL) 
RETURNS TABLE
AS 
RETURN
    SELECT  SUM(Value) AS koszt
    FROM    [dbo].[Cost]
    WHERE   [ID_CostCategory] = @pID_CostCategory
    AND     ([ID_Department] = @pID_Department OR @pID_Department IS NULL)
GO