2017-10-26 10 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

고마워요! –