根据具体日期求当月的数据,sql怎么写

参数日期控件填入具体日期  开始日期跟结束日期,根据这个日期求这个月的数据,sql怎么写

image.png

下面是我写当期的sql


select (case

         when a.compname = '北京分公司' then

          '北京'

         when a.compname = '河南分公司' then

          '河南'

when a.compname = '江苏分公司' then

          '江苏'

when a.compname = '上海分公司' then

          '上海'

       end) as 销售区域,

       a.bankname as 销售渠道,

       c.shortname as 销售产品,

       (case

         when a.payintv = 0 then

          '趸交'

         when a.payintv <> 0 then

          a.payendyear

       end) as 缴费年期,

       count(distinct a.contno) 件数,

       sum(a.new_prem) AS TRANSMONEY, 

       'NB' as datatype

  from com_polno_detail a

 inner join tmp_performance b

    on a.contno = b.contno

   and b.deptname in ('股份行', '地方行')

  left join com_risk_mapping c

    on a.riskcode = c.riskcode

 where a.signdatep >= date '${startdate}' 

   and a.signdatep <= date '${enddate}'

 group by a.compname,

          a.bankname,

          c.shortname,

          (case

            when a.payintv = 0 then

             '趸交'

            when a.payintv <> 0 then

             a.payendyear

          end)



报错了

image.png

FineReport free_zz 发布于 2019-10-21 12:51 (编辑于 2019-10-21 13:02)
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
萌萌的呆贼Lv4初级互助
发布于2019-10-21 12:56

什么数据库啊?

  • free_zz free_zz(提问者) oracle数据库
    2019-10-21 12:57 
  • 萌萌的呆贼 萌萌的呆贼 回复 free_zz(提问者) 我这儿没有oracle库测试 你测试下试试呢。 monthValue--月份参数 如\'2019-10\' 修改where条件 where a.signdatep >= to_date(\'${monthValue}\'||\'-01\',\'YYYY-MM-DD\') and a.signdatep < to_date(add_months(to_date(\'${monthValue}\'||\'-01\',\'YYYY-MM-DD\'),1),\'YYYY-MM-DD\')
    2019-10-21 13:04 
  • free_zz free_zz(提问者) 回复 萌萌的呆贼 我的是日期参数呢,如2019-10-10,有年月日的 ,不是月份参数哦
    2019-10-21 13:06 
  • 萌萌的呆贼 萌萌的呆贼 回复 free_zz(提问者) 那截取一下 where a.signdatep >= to_date(SUBSTR(\'${startdate}\',1,7)||\'-01\',\'YYYY-MM-DD\') and a.signdatep < to_date(add_months(to_date(SUBSTR(\'${enddate}\',1,7)||\'-01\',\'YYYY-MM-DD\'),1),\'YYYY-MM-DD\')
    2019-10-21 13:11 
最佳回答
0
张洪威Lv6高级互助
发布于2019-10-21 12:55(编辑于 2019-10-21 13:19)

如果你的开始日期跟结束日期不跨月的话

where 后面加  to_number(to_char(字段,'yyyy'))=year($stardate) and  to_number(to_char(字段,'MM'))=month($stardate) 

  • free_zz free_zz(提问者) 报错了呢,我完善了 麻烦看下
    2019-10-21 13:03 
  • 张洪威 张洪威 回复 free_zz(提问者) oracle没year month 函数 。用更新回答的那句试试。
    2019-10-21 13:05 
  • free_zz free_zz(提问者) 回复 张洪威 不可以 没有year month 函数呢
    2019-10-21 13:12 
  • 张洪威 张洪威 回复 free_zz(提问者) 回答更新了啊,你看回答啊。
    2019-10-21 13:18 
最佳回答
0
firegunzxLv6高级互助
发布于2019-10-21 12:56(编辑于 2019-10-21 12:58)

设两个日期控件参数,startdate中填入公式DATEINMONTH(TODAY(),1),enddate中填入公式DATEINMONTH(TODAY(),-1),就是月初到月末


或者把sql改一下,直接month(signdatep)=month('${startdate}') and year(signdatep)=year('${startdate}'),也是取当月数据

  • free_zz free_zz(提问者) 不可以哦 报错了
    2019-10-21 13:01 
  • firegunzx firegunzx 回复 free_zz(提问者) 这个是sqlserver的语法,oracle是to_char(sysdate, \'yyyy-MM\' )取当前年月
    2019-10-21 13:13 
最佳回答
0
Doctor_WeiLv7中级互助
发布于2019-10-21 13:10

to_date('${startdate}','yyyy-mm-dd')

用这中格式试一下

  • 5关注人数
  • 615浏览人数
  • 最后回答于:2019-10-21 13:19
    请选择关闭问题的原因
    确定 取消
    返回顶部