我不知道为什么我的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)
答案 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