如何获取跨年数据获取

麻哩麻饭的 2023-07-03 15:32:58

数据源 表tYBCZDJ:
ID                FYear    FMonth    FYBCZYF(金额字段)

SHANGHAI  2022     11           443,431.19
SHANGHAI  2023     04           919,552.57
SHANGHAI  2023     05           1,400,920.44
SHANGHAI  2023     06           1,798,342.25
SHANGHAI  2023     12           50000
SHANGHAI  2024     01           100000

 现在报表格式为:
ID  本月  上月  本年  累计
如果不跨年没有问题,直接用case when 写,代码如下:
 

DECLARE @fyear VARCHAR(255);
DECLARE @fmonth VARCHAR(255);

SET @fyear='2023'
SET @fmonth='06'


SELECT ID,SUM(CASE WHEN FYear=@fyear AND FMonth=@fmonth THEN TRY_PARSE(FYBCZYF AS NUMERIC(18,2)) ELSE 0 END )本月,
						       SUM(CASE WHEN FYear=@fyear AND FMonth=@fmonth-1 THEN TRY_PARSE(FYBCZYF AS NUMERIC(18,2)) ELSE 0 END )上月,
						       SUM(CASE WHEN FYear=@fyear  THEN TRY_PARSE(FYBCZYF AS NUMERIC(18,2)) ELSE 0 END )本年,
							   SUM(TRY_PARSE(FYBCZYF AS NUMERIC(18,2)))累计
						    FROM tYBCZDJ WHERE ID='SHANGHAI' GROUP BY ID

但是2024年1月份查询应该是2023年12月份,这个在上月如何写的?请指教。

...全文
164 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
日月于山河上 2023-07-04
  • 打赏
  • 举报
回复 1

-- 声明并赋值变量
DECLARE @fyear VARCHAR(255);
DECLARE @fmonth VARCHAR(255);

SET @fyear='2024';
SET @fmonth='01';

-- 查询语句,计算汇总金额
SELECT ID,
SUM(CASE WHEN FYear=@fyear AND FMonth=@fmonth THEN TRY_PARSE(FYBCZYF AS NUMERIC(18,2)) ELSE 0 END ) AS 本月,
SUM(CASE WHEN FYear=CASE @fmonth WHEN '01' THEN CAST(@fyear AS INT) - 1 ELSE @fyear END
AND FMonth=CASE @fmonth WHEN '01' THEN '12' ELSE CAST(CAST(@fmonth AS INT) - 1 AS VARCHAR(2)) END
THEN TRY_PARSE(FYBCZYF AS NUMERIC(18,2)) ELSE 0 END ) AS 上月,
SUM(CASE WHEN FYear=@fyear THEN TRY_PARSE(FYBCZYF AS NUMERIC(18,2)) ELSE 0 END ) AS 本年,
SUM(TRY_PARSE(FYBCZYF AS NUMERIC(18,2))) AS 累计
FROM tYBCZDJ
WHERE ID='SHANGHAI'
GROUP BY ID;

麻哩麻饭的 2023-08-17
  • 举报
回复
@日月于山河上 谢谢,非常有用!
麻哩麻饭的 2023-07-04
  • 打赏
  • 举报
回复

咋没人回复?

34,609

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧