sql问题

如何把每日的数据分为一个月上中下三旬,prod_date为日期字段

select 

     bc.db,

     bc.xb_name,

r.PARENT_STATION_ID,

r.PARENT_STATION_NAME,

r.ORG_NAME,

r.ORG_ID,   

     r.ACCEPT_TWO_VOL,

r.ACCEPT_PRESS,

r.primary_id r_id

  from HOUR_BC_TWO bc

   

   left join PC_BSQ_MAIN_LINE_S_SHIFT r--输入输出累计流量班数据

   on r.work_shifts = bc.xb_name

   and (r.org_id = '${org_id}' or r.org_id = '${org_id2}')

   and r.prod_date = to_date('${reportDate}', 'yyyy-MM-dd')

 order by bc.db_sort_code, bc.sort_code

image.png

FineReport 用户G2632943 发布于 2022-10-28 10:56 (编辑于 2022-10-28 11:47)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
CD20160914Lv8专家互助
发布于2022-10-28 13:31

看你预览的截图。这里为什么最后还有一个end???删除它

image.png

这样语法是没有问题的。如果有报错,请检查一下你的r.prod_date这个字段的数据类型到底是什么?

select 

bc.db,

bc.xb_name,

r.PARENT_STATION_ID,

r.PARENT_STATION_NAME,

r.ORG_NAME,

r.ORG_ID,  

r.ACCEPT_TWO_VOL,

r.ACCEPT_PRESS,

r.primary_id as  r_id,

case when to_char(r.prod_date,'dd')>21 then '下旬'

when to_char(r.prod_date,'dd')>11 then '中旬'

else '上旬' end as 区间

  from HOUR_BC_TWO bc

   left join PC_BSQ_MAIN_LINE_S_SHIFT r on r.work_shifts = bc.xb_name

   and (r.org_id = '${org_id}' or r.org_id = '${org_id2}')

   and r.prod_date = to_date('${reportDate}', 'yyyy-MM-dd')

 order by bc.db_sort_code, bc.sort_cod

最佳回答
0
胡歌Lv7中级互助
发布于2022-10-28 10:59

case when day(prod_date) <= 10 "上旬"

        when day(prod_date)  > 10 and  day(prod_date) <=20  "中旬"

        else  "下旬" end 

  • 用户G2632943 用户G2632943(提问者) 缺失关键字
    2022-10-28 11:18 
  • 胡歌 胡歌 回复 用户G2632943(提问者) 根据你自己的数据库改一下日期函数不就可以了,原理都一样
    2022-10-28 11:32 
  • 用户G2632943 用户G2632943(提问者) 回复 胡歌 不行,还是缺失关键字
    2022-10-28 16:23 
  • 胡歌 胡歌 回复 用户G2632943(提问者) 你from 前面多了一个end ,去掉就好了
    2022-10-28 18:01 
最佳回答
0
Z4u3z1Lv6专家互助
发布于2022-10-28 11:03

select 

     bc.db,

     bc.xb_name,

r.PARENT_STATION_ID,

r.PARENT_STATION_NAME,

r.ORG_NAME,

r.ORG_ID,   

     r.ACCEPT_TWO_VOL,

r.ACCEPT_PRESS,

r.primary_id r_id,

(CASE WHEN to_char(r.prod_date, 'dd')<=10 THEN '上旬' WHEN to_char(r.prod_date, 'dd')<=20 THEN '中旬' ELSE '下旬' END) as '区间'

  from HOUR_BC_TWO bc

   

   left join PC_BSQ_MAIN_LINE_S_SHIFT r --输入输出累计流量班数据

   on r.work_shifts = bc.xb_name

   and (r.org_id = '${org_id}' or r.org_id = '${org_id2}')

   and r.prod_date = to_date('${reportDate}', 'yyyy-MM-dd')

 order by bc.db_sort_code, bc.sort_code

  • 用户G2632943 用户G2632943(提问者) 缺失关键字
    2022-10-28 11:48 
  • Z4u3z1 Z4u3z1 回复 用户G2632943(提问者) oracle的不熟悉。你把case 里面 获取天的函数改一下试试。也就是改一下 to_char(r.prod_date, \'dd\')
    2022-10-28 11:56 
最佳回答
0
大狸子Lv4见习互助
发布于2022-10-28 17:09

昨天不是回答了你这个问题吗?

https://bbs.fanruan.com/wenda/question/135120.html

(case when (datepart(day,signDate)<=10) then '上旬' 

when (datepart(day,signDate)<=20 and (datepart(day,signDate)>=11) ) then '中旬'

else '下旬' 

end)'时间段'

你把  signDate 替换成你的 prod_date日期字段就可以

  • 4关注人数
  • 391浏览人数
  • 最后回答于:2022-10-28 17:09
    请选择关闭问题的原因
    确定 取消
    返回顶部