2013-09-14 2 views
0

мне нужно иметь функцию с более чем одним 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 

Пожалуйста, помогите, как получить его.

+0

Почему вы не можете комбинировать несколько условий с 'И'? – PoByBolek

+0

@marc_s Я использую SQL Server 2008 r2. – user2748298

+0

@PoByBolek, я получаю сообщение об ошибке: «Выражение небулевого типа, указанное в контексте, где ожидается условие, рядом с« и ». – user2748298

ответ

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 
+0

Я делаю что-то неправильно. С самого начала. У меня есть таблица затрат с: ID_Cost, Value, Name, ID_CostCategory, ID_Department. Сейчас мне нужно создать отдельную таблицу (CategoryDepartment), которая будет включать ID_CategoryDepartment, ID_Department, ID_CostCategory и последний столбец, в котором будет представлен СУММ значений из таблицы затрат (для каждого ID_департамента или каждой ID_CostCategory). Категории затрат могут быть назначены различным департаментам, поэтому в отделе 1 может быть CostCategory 1 (сумма из значений из таблицы затрат равна 500), а категория затрат 2 (сумма из значений из таблицы затрат - 200) и т. Д. Для всех. Отправление – user2748298

+0

Создать другой вопрос. –

0

Если я unterstood ваших комментариев правильно, возможно, введение второго параметра Я к вашей функции будет делать трюк:

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 
Смежные вопросы