在CREATE FUNCTION中,验证SQL中是否存在参数值,然后应用条件(如果不存在)显示所有值

时间:2017-10-26 18:38:32

标签: sql function if-statement parameters exists

我不知道为什么我的SQL代码不起作用。我正在寻找一种方法来应用所要求的年份的条件,但如果它不存在,它应该显示全年。但是,代码无法正常工作。

CREATE FUNCTION SALES_YEAR(@year int=0) RETURNS TABLE
AS 
RETURN
IF EXISTS(SELECT 1 FROM AdventureWorks2014.Sales.SalesOrderHeader where 
Year(OrderDate)=@year)
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)=@year or @year=0
    GROUP BY Year(OrderDate),SOH.TerritoryID

END)

1 个答案:

答案 0 :(得分: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