1

私は SQL Server Reporting Services 2008 を使用していますが、私の経験のほとんどは LAMP 開発に関するものであるため、これは私にとってやや新しいものです。さらに、ほとんどのロジックをストアド プロシージャとして SQL に移行することについては、あまり詳しくありませんが、実行したいと考えています。どんな助けや指示も大歓迎です。

レポート パラメーターの許容値として使用する、表形式の許容可能な給与日付のリストが必要です。理想的には、ユーザーはレポート パラメーターによって提供されるドロップダウンからこの給与計算日を選択できるようになり、データセットで使用されてテーブルからデータを取得できるようになります。可能であれば、ロジックを SQL サーバーに保存したいと考えています。これは、他のいくつかのレポートで使用される可能性が高いためです。

日付のリストを作成するロジックはかなり単純です。これは、システムが必要とする最も古い給与計算日 (2007 年のいつか) から始まり、そこから 2 週間ごとに単純に進みます。プロシージャまたは関数は、直近の給与計算日までのこれらすべての日付を含むテーブルを返す必要があります。

これを行う方法は、一時テーブルを作成し、それに日付のリストを追加してから、レポート パラメーターが読み取れるようにこのテーブルを返すプロシージャまたは関数であるように思えます。これは受け入れられる方法ですか?

アイデア、例、または考えは大歓迎です。

4

2 に答える 2

2

次のような CTE を使用します。

;WITH PayPeriod AS (
    SELECT @DateIn2007 AS p UNION ALL
    SELECT DATEADD(dd, 14, p) as P FROM PayPeriod WHERE p < GetDate() )
SELECT p FROM PayPeriod
OPTION ( MAXRECURSION 500 )

MAXRECURSION および/または where パラメータは、生成される日付の数を制限します。

もちろん、パラメーターを使用して正しい制限を把握し、正しい最後の日付を取得することもできます。

于 2010-10-25T17:43:06.593 に答える
1

このようなことを試してください:

;with AllDates AS
(
    SELECT CONVERT(datetime,'1/1/2007') AS DateOf
    UNION ALL
    SELECT DateOf+14
        FROM AllDates
    WHERE DateOf<GETDATE()+14
)
SELECT * FROM AllDates
OPTION (MAXRECURSION 500)

これをビューまたは関数に入れることができます。

ただし、このように多くの値の選択ボックスを表示する代わりに、開始日終了日の 2 つのテキスト ボックス フィールドを用意し、デフォルトで適切な値を 2 セントに設定することをお勧めします。

于 2010-10-25T17:45:27.453 に答える