我有一个表格示例:
State Project Build Type ACTUAL0 ACTUAL1 ACTUAL2
------- ------- ----------- ----------- ----------- ----------
Ohio 154214 Residential 1/5/2013 2/25/2013 7/12/12
Utah 214356 Commercial 7/08/13 6/9/13 7/1/12
我正在尝试创建一个报告,该报告采用以实际单词开头的列标题并计算有多少日期小于特定日期。我有一个以实际单词开头的列标题创建的临时表。这只是一个例子,实际有超过 250 个列名。所以表格看起来像这样:
MilestoneNmbr
-------------
ACTUAL1
ACTUAL2
ACTUAL3
现在我认为可行的是将行作为列标题的变量并将日期传递给函数。这是我创建的一个函数:
CREATE FUNCTION [dbo].[GetMSActualCount]
(
@ACTUAL nvarchar(16),
@DATE nvarchar(16)
)
RETURNS int
AS
BEGIN
DECLARE @ACTUALRETURN int
DECLARE @SQL nVarchar(255) =
'SELECT COUNT(' + @ACTUAL + ') AS Expr1
FROM [CASPR_MILESTONES_000-036]
WHERE '+ @ACTUAL +' > ' + @DATE
exec sp_executesql @SQL, N''
SET @ACTUALRETURN = @SQL
-- Return the result of the function
RETURN @ACTUALRETURN
END
如果我运行以下查询:
DECLARE @DATE varchar(20)
SET @DATE = '''1/1/2013'''
SELECT MilestoneNmbr, dbo.getMSActualCount(milestonenmbr,@Date) from #List_CASPR_Milestones
所以我的错误是我不能在函数中使用动态 SQL。既然如此,我该怎么办?我认为我在这里的简单查询会变成数百行。还有另一种简单的方法可以做到这一点吗?
编辑:
我正在寻找的结果是这样的:
MilestoneNmbr CountofDate
--------------- ------------
ACTUAL1 200
ACTUAL2 344
ACTUAL3 400