ERP システムの会計年度テーブルから日付ディメンション テーブルを更新しようとしています。次のクエリを実行すると:
SELECT fcname FYName
,min(fdstart) YearStart
,max(fdend) YearEnd
,max(fnnumber) PeriodCount
FROM M2MData01.dbo.glrule GLR
GROUP BY fcname
次のデータを取得します。
FYName YearStart YearEnd PeriodCount
FY 2000 1/1/2000 12:00:00 AM 12/31/2000 12:00:00 AM 12
FY 2001 1/1/2001 12:00:00 AM 12/31/2001 12:00:00 AM 12
FY 2002 1/1/2002 12:00:00 AM 12/31/2002 12:00:00 AM 12
FY 2003 1/1/2003 12:00:00 AM 12/31/2003 12:00:00 AM 12
FY 2004 1/1/2004 12:00:00 AM 12/31/2004 12:00:00 AM 12
FY 2005 1/1/2005 12:00:00 AM 12/31/2005 12:00:00 AM 12
FY 2006 1/1/2006 12:00:00 AM 12/31/2006 12:00:00 AM 12
FY 2007 1/1/2007 12:00:00 AM 12/31/2007 12:00:00 AM 12
FY 2008 1/1/2008 12:00:00 AM 12/31/2008 12:00:00 AM 12
FY 2009 1/1/2009 12:00:00 AM 12/31/2009 12:00:00 AM 12
FY 2010 1/1/2010 12:00:00 AM 12/31/2010 12:00:00 AM 12
私の場合、私の会社には年に 12 の期間があり、これはほぼ月に相当します。基本的に、次のロジックに従う会計四半期を設定する更新ステートメントを作成しようとしています
。 1. PeriodCount が 4 で割り切れる場合、四半期の期間数は PeriodCount/4 です。
2. PeriodNumber が第 1 四半期 (この場合は期間 1 から 3) にある場合、FiscalQuarter =1 となり、四半期 2 から 4 についても同様です。
問題は、すべての人が 12 ピリオドを使用しているとは保証できないことです。私がサポートする一部の企業では、10 ピリオドなどの別のピリオドを使用しています。
次の選択ステートメントの作成を開始しました。
DECLARE @QuarterSize INT
DECLARE @SemesterSize INT
SELECT TST.Date,
CASE WHEN glr.PeriodCount % 4 = 0 THEN
-- Can Be divided into quarters. Quarter size is PeriodCount/4
set @quartersize = (GLR.PeriodCount/4)
CASE
END
ELSE 0
End
FROM m2mdata01.dbo.AllDates TST
INNER JOIN (
SELECT fcname FYName
,min(fdstart) YearStart
,MAX(fdend) YearEnd
,MAX(fnnumber) PeriodCount
FROM M2MData01.dbo.glrule GLR
GROUP BY fcname ) GLR
ON TST.DATE >= GLR.YearStart AND TST.DATE <= GLR.YearEnd
このように case ステートメント内で変数の値を設定できますか? これを達成するための最良の方法は何ですか? カーソル ステートメントを使用して、上の表の範囲に対してディメンションの各日付をチェックする必要がありますか?