【发布时间】:2014-02-25 12:21:06
【问题描述】:
我正在研究表值函数,我需要一些帮助。这是我得到的,但看起来 Table-value 函数不喜欢在 RETURN() 语句中声明任何变量。
如您所见,我正在捕获列名称(使用声明/设置变量),但它似乎不适用于值表值。
请告知另一种方法。如果可能,请提供一些示例代码。
谢谢,
Alter FUNCTION getCompanySaleYears()
RETURNS TABLE
AS
RETURN
(
-- //////// START: Get the Years and put them in the String for columns /////////
Declare @StartYear INT, @EndYear INT, @sql VARCHAR(MAX)
Declare @StrYears varchar(max);
Set @StartYear = 2011;
SET @EndYear = Year(Getdate());
SET @StrYears = ''
WHILE @StartYear <= @EndYear
BEGIN
SET @StrYears = @StrYears + ', [' + cast(@StartYear as varchar(10)) + ']'
SET @StartYear = @StartYear + 1
END
Select @StrYears = (SUBSTRING(@StrYears, 2, LEN(@StrYears)) )
-- //////// START: Get the Years and put them in the String for columns /////////
SET @sql = N'
SELECT CompanyID, ' + @StrYears + '
FROM (
SELECT CompanyID, SalesYear, SUM(TotalSO) AS TotalSO FROM (
SELECT c.CompanyID, o.OrderID, YEAR(o.CreatedDate) AS SalesYear
, ISNULL((Select SUM(ExtQty * UnitSell) FROM dbo.OrderDetail WHERE OrderID = o.OrderID ), 0) AS TotalSO
FROM dbo.Company c
LEFT JOIN Order o ON o.CompanyID = c.CompanyID
WHERE 1 = 1
--AND c.CompanyID = o2.CompanyID
AND YEAR(o.CreatedDate) BETWEEN ''2011'' And Year(Getdate())
) z
GROUP BY CompanyID, SalesYear
) x
PIVOT
(
Sum(TotalSO)
FOR SalesYear
IN (
' + @StrYears + '
)
) AS pvtSalesYear
'
PRINT @sql
EXEC (@sql)
)
【问题讨论】:
-
仅供参考:您不能在 SQL 函数中使用动态 SQL。
标签: sql sql-server tsql