2017-10-26 15 views
0

SQLコードが機能しない理由はわかりません。私は年に条件を適用する方法を探していますが、存在しない場合は一年中表示されるはずです。どのように、コードは動作しません。CREATE FUNCTIONでは、パラメータ値がSQLに存在するかどうかを検証し、条件が存在しない場合は条件を適用します。

CREATE FUNCTION SALES_YEAR(@year int=0) RETURNS TABLE 
AS 
RETURN 
IF EXISTS(SELECT 1 FROM AdventureWorks2014.Sales.SalesOrderHeader where 
Year(OrderDate)[email protected]) 
SELECT Year(OrderDate) as 
[YEAR],SOH.TerritoryId,convert(varchar,SUM(SOH.SubTotal),1)as VenteTotal from AdventureWorks2014.Sales.SalesOrderHeader SOH 
    GROUP BY Year(OrderDate),SOH.TerritoryID; 

ELSE 
    SELECT Year(OrderDate) as [year],SOH.TerritoryId,convert(varchar,SUM(SOH.SubTotal),1)+'$'as VenteTotal from AdventureWorks2014.Sales.SalesOrderHeader SOH 
    Where Year(OrderDate)[email protected] or @year=0 
    GROUP BY Year(OrderDate),SOH.TerritoryID 

END) 
+3

どのRDBMSを使用していますか? –

答えて

0

テーブルを定義して結果を入力する必要があります。

CREATE FUNCTION SALES_YEAR 
    (
     @year INT = 0 
    ) 
RETURNS @table TABLE 
    (
     OrdYear INT , 
     TerritoryID INT , 
     VenteTotal MONEY 
    ) 
AS 
    BEGIN 
     IF EXISTS ( SELECT 1 
         FROM AdventureWorks2014.Sales.SalesOrderHeader 
         WHERE YEAR(OrderDate) = @year 
       ) 
      INSERT INTO @table 
      SELECT YEAR(OrderDate) AS [YEAR] , 
        SOH.TerritoryId , 
        CONVERT(VARCHAR, SUM(SOH.SubTotal), 1) AS VenteTotal 
      FROM  AdventureWorks2014.Sales.SalesOrderHeader SOH 
      GROUP BY YEAR(OrderDate) , 
        SOH.TerritoryID 

     ELSE 
      INSERT INTO @table 
      SELECT YEAR(OrderDate) AS [year] , 
        SOH.TerritoryId , 
        CONVERT(VARCHAR, SUM(SOH.SubTotal), 1) + '$' AS VenteTotal 
      FROM  AdventureWorks2014.Sales.SalesOrderHeader SOH 
      WHERE YEAR(OrderDate) = @year 
        OR @year = 0 
      GROUP BY YEAR(OrderDate) , 
        SOH.TerritoryID; 

     RETURN 

    END 
+0

ありがとうございます! –

関連する問題