2016-11-03 2 views
0

Хочет создать функцию стандартной стандартной цены продукта для одного цвета и использовать 'red' для тестирования. Но NULL вернулся. Если только запустите SELECT, FROM, WHERE, GROUP BY, он будет работать файлом и вернуть значение.SQL Create Function

Вот мой код:

CREATE FUNCTION avgv (@Color CHAR) 
RETURNS CHAR 
AS 
BEGIN 
     DECLARE @AVG CHAR ; 
     SET @AVG = (SELECT P.Color AVG(P.StandardCost) 
     FROM AdventureWorksLT.SalesLT.Product P 
     WHERE P.Color = @Color 
     GROUP BY Color) 

     Return @AVG 

END 
GO 
SELECT dbo.avgv('red') 

Пожалуйста, дайте мне знать, как исправить, спасибо!

+1

Вы забыли указать длину в обоих входных параметров и возвращаемого результата. Кроме того, я полагаю, вы должны использовать 'VARchar'. 'CHAR' то же, что и' VARCHAR' с явно определенной длиной length означает length = 1 (один символ). –

+0

И как уже упоминалось - ваш результат не похож на персонажа, так как вы вычисляете 'AVG'. –

ответ

1

Входной параметр: символ -> VARCHAR (100)
Возвращает -> символ -> Int целочисленного результата/десятичный (18, 2) для результата флоат
Удалить группу По

Функция

CREATE FUNCTION avgv (@Color varchar(100)) 
RETURNS real 
AS 
BEGIN 
     DECLARE @AVG real; 
     SET @AVG = (SELECT AVG(ISNULL(P.StandardCost, 0)) 
     FROM AdventureWorksLT.SalesLT.Product P 
     WHERE P.Color = @Color) 

     Return @AVG 

END 
GO 
SELECT dbo.avgv('red') 

Процедура

CREATE PROCEDURE avgv (@Color varchar(100)) 
AS 
BEGIN 
     SELECT AVG(ISNULL(P.StandardCost, 0)) 
     FROM AdventureWorksLT.SalesLT.Product P 
     WHERE P.Color = @Color 
END 
+0

Но, еще NULL вернулся. –

+0

SELECT AVG (ISNULL (P.StandardCost, 0)) –

+0

это работает после использования RETURN REAL, также вы можете помочь мне преобразовать его в процедуры создания? Я хочу называть его с другого языка, поэтому нам нужна процедура, которая может содержать введенный параметр (COLOR). –

Смежные вопросы