私はそのようなテーブルの例を持っています:
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