【发布时间】:2015-06-12 16:55:38
【问题描述】:
我正在尝试从 SQL 查询中累积金额。输入 @STARTDATE 和 @ENDDATE 是日期时间类型 (YYYYMMDD)。
因此,Case 语句会检查验证日期是否在特定日期之间。
对Case语句的一些解释:
工作正常:
CURRENT_YEAR_ACC,从年初到@ENDDATE累计当前年份的验证量
CURRENT_YEAR_MONTHS,@STARTDATE 和@ENDDATE 之间的累计金额。
PREVIOUS_YEAR_MONTH,过去几年在@STARTDATE -1 年和@ENDDATE -1 年之间的累积金额。
不起作用:
PREVIOUS_YEAR_ACC,应该计算去年初(20XX-01-01)到@ENDDATE -1yr。
在这里我得到与 PREVIOUS_YEAR_MONTH 相同的值
sum (RAW_DATA.CURRENT_YEAR_MONTH) as PERIOD_I_AR,
sum (RAW_DATA.PREVIOUS_YEAR_MONTH) as PERIOD_FG_AR,
sum (RAW_DATA.CURRENT_YEAR_ACC) as ACK_I_AR,
sum (RAW_DATA.PREVIOUS_YEAR_ACC) as ACK_FG_AR
from (SELECT rehuv.[KD1] as VST_nr, rekod.BEN as VST_ben,
rehuv.KONTO as Konto_nr, rektk.KONTO_BEN as Konto_ben,
lresk.LEV_NR as LEV_nr, rehuv.TEXT as LEV_ben, rehuv.VER_DATUM
as DATUM, case when rehuv.VER_DATUM > = dateadd (month,
- datepart (month, @STARTDATE) + 1, @STARTDATE)
and rehuv.VER_DATUM < = @ENDDATE then rehuv.BELOPP else 0 end
as CURRENT_YEAR_ACC,
case when rehuv.VER_DATUM > = dateadd (YEAR, - 1, dateadd (MONTH, - datepart (MONTH, @STARTDATE) + 1, @STARTDATE)) and rehuv.VER_DATUM < = DATEADD (year, - 1, @ENDDATE)
then rehuv.BELOPP else 0 end as PREVIOUS_YEAR_ACC,
case when rehuv.VER_DATUM > = @STARTDATE
and rehuv.VER_DATUM < = @ENDDATE then rehuv.BELOPP else 0 end
as CURRENT_YEAR_MONTH,
case when rehuv.VER_DATUM > = DATEADD (year, - 1, @STARTDATE)
and rehuv.VER_DATUM < = DATEADD (year, - 1,
@ENDDATE) then rehuv.BELOPP else 0 end
as PREVIOUS_YEAR_MONTH FROM [FTG0001].[dbo].[REHUV]
【问题讨论】:
-
有没有机会创建一个MCVE?
-
@Amit 更新了代码
-
不幸的是,这不是 MCVE。这是一个不完整的片段。 MCVE 是一个最小的、COMPLETE、可验证的例子。这个片段让人很难理解。
标签: sql sql-server tsql