给参数赋值一个年份的范围,让sql查询时自动生成这几个年份的数值,请问有大神知道sql要怎么写吗?

如以下sql语句,但这个写法是错的,不知道咋修改,不知道有没有大神能指导一下:

select  ‘${年份} ’as "年份", sum(金额) as "总金额" from 财务表

where 年份<=${年份} and ${年份} in(2023,2022,2021,2020,2019)

group by 年份

想要生成这样的查询结果:

年份   总金额

2023    98

2022    90

2021    56

2020    45

2019    34

就是2023年汇总2023年及之前的财务金额,2022年汇总2022年及之前的财务金额,这样的数据查询结果。

SQL yzm545275 发布于 2024-5-22 13:40 (编辑于 2024-5-22 13:44)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
0
CovidLv3中级互助
发布于2024-5-22 13:45(编辑于 2024-5-22 14:01)

SqlServer?oracle?mysql?

---------

方法1:

SELECT DATE_ADD('开始日期', INTERVAL n.num DAY) AS 时间段

FROM (SELECT 0 AS num UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) AS n

INNER JOIN (SELECT 0 AS num UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) AS m

ON DATE_ADD('开始日期', INTERVAL n.num + m.num DAY) <= '结束日期'

方法2:

WITH RECURSIVE 时间段表 AS (

  SELECT '开始日期' AS 时间段

  UNION ALL

  SELECT DATE_ADD(时间段, INTERVAL 1 DAY)

  FROM 时间段表

  WHERE DATE_ADD(时间段, INTERVAL 1 DAY) <= '结束日期'

)

SELECT 时间段 FROM 时间段表

  • yzm545275 yzm545275(提问者) mysql写的
    2024-05-22 13:58 
  • Covid Covid 回复 yzm545275(提问者) mysql不熟,上面是AI生成的代码你参考一下
    2024-05-22 14:01 
最佳回答
0
歪歪的崽Lv4见习互助
发布于2024-5-22 13:45(编辑于 2024-5-22 14:00)

select  年份 as 年份, sum(金额) as 总金额 from 财务表

where 年份 <= '${年份}'

group by 年份

---------------------这样不行吗?我理解你参数是选的是2023年的话,就查询出小于等于2023年的所有数据,是这样吧?

  • yzm545275 yzm545275(提问者) 那咋给参数 '${年份}'赋值多个年份
    2024-05-22 14:06 
  • 歪歪的崽 歪歪的崽 回复 yzm545275(提问者) 你要是用小于等于来取数据的话,可以用日期控件呀,你要是用in的话,可以用下拉复选框
    2024-05-22 14:15 
  • 歪歪的崽 歪歪的崽 回复 yzm545275(提问者) 不太明白你这段sql要做什么样的查询报表
    2024-05-22 14:16 
  • yzm545275 yzm545275(提问者) 回复 歪歪的崽 这个的话参数年份只能赋值一个年份,无法多个年份,用复选框也不行。
    2024-05-22 14:31 
  • 歪歪的崽 歪歪的崽 回复 yzm545275(提问者) 数据集参数方式实现下拉复选框多选查询-https://help.fanruan.com/finereport/doc-view-1287.html
    2024-05-22 15:30 
最佳回答
0
snrtuemcLv8专家互助
发布于2024-5-22 13:46(编辑于 2024-5-22 14:03)

正常

select  ‘${年份} ’as 年份, sum(金额) as 总金额 from 财务表

where 年份<=${年份} and ${年份} in(2023,2022,2021,2020,2019)

group by 年份

=========

select  ‘${年份} ’as 年份, sum(金额) as 总金额 from 财务表

where 年份<=${年份} and ${年份} in('2023','2022','2021','2020','2019')

group by 年份

  • yzm545275 yzm545275(提问者) 不行,我得出的结果是年份是空的,没有一条条的每年的数值出来
    2024-05-22 13:59 
  • snrtuemc snrtuemc 回复 yzm545275(提问者) 知道了,年份要分开字符,看修改答案
    2024-05-22 14:03 
  • yzm545275 yzm545275(提问者) 回复 snrtuemc 修改了,也不行,没有加单引号这个应该没错,只是这个参数赋值用in可能不行
    2024-05-22 14:35 
最佳回答
0
renjialiangLv4见习互助
发布于2024-5-22 14:28(编辑于 2024-5-22 14:32)

select  ‘${年份} ’as "年份", sum(金额) as "总金额" from 财务表

where 年份<=${年份} and ${年份} in(2023,2022,2021,2020,2019)

group by 年份;

select  ‘年份’as "年份", sum(金额) as "总金额" from 财务表

where 年份<=${年份} and ${年份} in(2023,2022,2021,2020,2019)

group by 年份

参数不放select后面,应该就可以的,

  • yzm545275 yzm545275(提问者) 不是这个问题嘞,应该是这个写法 :${年份} in(2023,2022,2021,2020,2019),有问题,但不知道咋写。
    2024-05-22 14:42 
最佳回答
0
yzmY7r2d6462368Lv3初级互助
发布于2024-5-27 16:39(编辑于 2024-5-27 16:43)

我理解的你的需求是传一个参数然后查询这个事件参数前几年的数据,修改where条件,where 年份<=${年份} and where 年份>=DATE_SUB(${年份}, INTERVAL 1 YEAR) 我这是减一年的,如果传2023查询的就是2022-2023的数据,你根据实际修改吧

  • 6关注人数
  • 224浏览人数
  • 最后回答于:2024-5-27 16:43
    请选择关闭问题的原因
    确定 取消
    返回顶部