首页 > 请问Oracle有没有这样的功能?

请问Oracle有没有这样的功能?

抱歉,因为问题难以表述,只能这样提问了。 我想实现的是:先按某个字段归类后求出最大值,然后再求出值为最大的记录的其他信息(非group by 中的字段),这时会出现多个记录的值都为最的记录。 比如:表中F_XMBH(项目编号),F_XMMC,F_JE(金额),F_USER(使用人),我想按项目编号来归类求出金额最大的记录, 然后求出展示金额最大的记录的使用人情况,这时有可能项目值为最的的项目编号会有多条,即使用人a和b, 都对应最大值,但在展示的时候,我希望是项目编号只有一条,把使用人按'a,b'. 展示的效果如下: 最大值记录:

FXMBH FXMMC MAX(F_JE)
001 AA 123,00.00
0002 BB 1456.00

使用人情况:

F_XMBH F_XMMC F_JE F_USER
001 AA USER_A 123,00.00
001 AA USER_B 123,00.00

展示效果:

FXMBH FXMMC FJE FUSER
001 AA USERA,USERB 123,00.00

这个功能我知道通过多次遍历可以实现,但是业务中数据量比较大,能否通过oracle自身的功能实现这个效果。


10g版本:
select FXMBH, FXMMC, wmsys.wm_concat(FUSER), max(FJE) from t group by FXMBH, FXMMC

由于wmsys.wm_concat是内部函数,如果是11g版本的话建议使用listagg函数替代,例如:
LISTAGG(FJE) WITHIN GROUP (ORDER BY FJE)

【热门文章】
【热门文章】