我试图从ERP系统的会计年表中更新日期维度表。如果我运行下面的查询:试图在case语句中设置一个变量。
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通过4.
的问题是在第一季度(在这种情况下周期1〜3)然后FiscalQuarter = 1等为四分之三2是我不能保证每个人都使用12个周期有些公司我支持使用不同的数字,如10
我开始创建以下select语句:
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语句里面一个变量的值?什么是实现这一目标的最佳方式?我是否强制使用游标语句,并根据上表中的范围检查我的维度中的每个日期?
在你的例子中,我会小心GLR的两次使用。一般来说,仍然在思考你的问题。 – Tobiasopdenbrouw 2010-08-12 12:59:48
您有一个变量(@QuarterSize)和多行(即使PeriodCount在每个行中都相同)。你打算使用@QuarterSize,你想用哪一行来计算它? – 2010-08-12 13:01:21