2016-11-03 15 views
0

同じ色の平均製品標準価格の関数を作成し、 'red'を使ってテストすることを望みます。しかし、NULLが返されました。 SELECTFROMWHEREGROUP 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'と明示的に定義された長さは長さ= 1(1つの記号)を意味します。 –

+0

すでに述べたように、AVGを計算しているので、あなたの結果は文字のように見えません。 –

答えて

1

入力パラメータ:CHAR - > VARCHAR(100)
返します - > CHAR - >整数結果のために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)を入力する必要があります。 –