select *
from (select rt.objid,
rt.title,
sfd.forcastvalue,
sfd.indicatorcode,
rt.ratingvalue,
to_char(sfd.forcasttime, 'yyyy') baseyear,
(case sfd.indicatorcode
when '0011' then
sfd.forcastvalue
else
''
end) price,
(case sfd.indicatorcode
when '0004' then
sfd.forcastvalue
else
''
end) eps
from ir_report rt
left join sr_stockforecastrelation sfr on sfr.sourceentity =
rt.entityname
and sfr.sourceid = rt.objid
left join sr_stockforecastdetail sfd on sfd.forecastid =
sfr.forecastid
where rt.objid = 3111
and sfd.indicatorcode in (0004, 0011)
order by sfd.forcasttime)
执行效果
objid title code ravalue year price eps
1 3111 零·旗鼓D 0004 50 2016 1.40
2 3111 零·旗鼓D 0011 50 2017 52
3 3111 零·旗鼓D 0004 50 2017 1.00
我想要的效果
objid title code(可以去掉) ravalue year price eps
1 3111 零·旗鼓D 0004/0011(可以去掉) 50 2017 52 1.00
就是根据objid并且去year的最大值合并一行。求大神修改下!!!!!!!!!!
from (select rt.objid,
rt.title,
sfd.forcastvalue,
sfd.indicatorcode,
rt.ratingvalue,
to_char(sfd.forcasttime, 'yyyy') baseyear,
(case sfd.indicatorcode
when '0011' then
sfd.forcastvalue
else
''
end) price,
(case sfd.indicatorcode
when '0004' then
sfd.forcastvalue
else
''
end) eps
from ir_report rt
left join sr_stockforecastrelation sfr on sfr.sourceentity =
rt.entityname
and sfr.sourceid = rt.objid
left join sr_stockforecastdetail sfd on sfd.forecastid =
sfr.forecastid
where rt.objid = 3111
and sfd.indicatorcode in (0004, 0011)
order by sfd.forcasttime)
执行效果
objid title code ravalue year price eps
1 3111 零·旗鼓D 0004 50 2016 1.40
2 3111 零·旗鼓D 0011 50 2017 52
3 3111 零·旗鼓D 0004 50 2017 1.00
我想要的效果
objid title code(可以去掉) ravalue year price eps
1 3111 零·旗鼓D 0004/0011(可以去掉) 50 2017 52 1.00
就是根据objid并且去year的最大值合并一行。求大神修改下!!!!!!!!!!
解决方案 »
- java程序界面验证用户登录,连接oracle数据库查询用户名及密码,登录时老是说用户名不对
- 请助SQL批量插入数据的问题?
- 江湖告急,记录偶尔片段性丢失!!!
- 我想在 oracle 中查找 在 2006-7-10 到 2007-7-71 间信息怎么写??(求助)
- VB+ODBC+ORACLE同一句sql,结果不同
- 请问删除操作涉及2个表时在一条sql中怎么写?谢谢!
- Oracle的客户端哪里有下?
- oracle中CLOB类型数据的select问题
- 今天端午节 祝愿所有IT行业的朋友节日快乐!少些烦恼,多些开心 散分!
- 急求急求
- 请教如何将Oracle存储函数转为java方法?
- 请教大牛一个oracle语句问题,
select objid,title,forcastvalue,indicatorcode,ratingvalue,baseyear,max(price) price,max(eps) eps
from (select rt.objid,
rt.title,
sfd.forcastvalue,
sfd.indicatorcode,
rt.ratingvalue,
to_char(sfd.forcasttime, 'yyyy') baseyear,
(case sfd.indicatorcode
when '0011' then
sfd.forcastvalue
else
''
end) price,
(case sfd.indicatorcode
when '0004' then
sfd.forcastvalue
else
''
end) eps,
rank() over (partition by rt.objid order by to_char(sfd.forcasttime, 'yyyy') desc) rn
from ir_report rt
left join sr_stockforecastrelation sfr on sfr.sourceentity =
rt.entityname
and sfr.sourceid = rt.objid
left join sr_stockforecastdetail sfd on sfd.forecastid =
sfr.forecastid
where rt.objid = 3111
and sfd.indicatorcode in (0004, 0011)
order by sfd.forcasttime)
where rn = 1
group by objid,title,forcastvalue,indicatorcode,ratingvalue,baseyear
没有测试过,楼主可以试看看
是按照baseyear分组了但是没有合并成一条。eps和price还是分开两条显示的