表A1(用户表)户与表A2(职位表)为一对多关系,
表A1:(
a000;//id
b000;//部门
a0101;//姓名
)
表A2:(
a000;//a1的ID
b000;//变动的部门ID
a201;//变动的职位ID
a202;//职位开始时间(date)
a203;//职位结束时间(date)

请问怎么算出某用户的全部变动部门(用可,分开),累计经历时间;如结果:
姓名(a0101) 所在机构(多个A2.b000)             岗位(多个A2.a201)             累计月份(多个a203-a202之和)
王码        dept1,dept2,dept3                   aa,bb,cc                         30

解决方案 »

  1.   

    select a0101,wmsys.wm_concat(a2.b000),wmsys.wm_concat(a2.a201), floor(sum(a203-a202)/30) 
    from a1,a2 where a1.a000 = a2.a000 group by a0101;
      

  2.   

    2楼的强人!
    还有一个问题,职位结束时间a203可能没有,因为有在职的情况,如果是在正,则取当前系统时间,SQL怎么补写上?多谢!
      

  3.   

    select a0101,wmsys.wm_concat(a2.b000),wmsys.wm_concat(a2.a201), floor(sum(nvl(a203,sysdate)-a202)/30) 
    from a1,a2 where a1.a000 = a2.a000 group by a0101;
      

  4.   

    用这个函数:
    wmsys.wm_concat用户名为:wmsys,函数名为:wm_concat
      

  5.   

    各位高手,在Hibernate里好像不行啊,怎么办?
      

  6.   

    看看hibernate最后的sql的样子是不是这样的,可能是hibernate的语法树解析不了这个方法,这个wmsys.wm_concat是10g里的。
      

  7.   

    如果我也想把A000取出来,怎么写呀?
    我刚试了下
    select a000,a0101,wmsys.wm_concat(a2.b000),wmsys.wm_concat(a2.a201), floor(sum(nvl(a203,sysdate)-a202)/30) 
    from a1,a2 where a1.a000 = a2.a000 group by a0101;
    加上"a000"后,这个语句就执行不了了,但是这个用户ID主键也是必须要取出来的.
      

  8.   

    着急解决这个问题.如果我也想把A000取出来,怎么写呀? 
    我刚试了下 
    select a000,a0101,wmsys.wm_concat(a2.b000),wmsys.wm_concat(a2.a201), floor(sum(nvl(a203,sysdate)-a202)/30) 
    from a1,a2 where a1.a000 = a2.a000 group by a0101; 
    加上"a000"后,这个语句就执行不了了,但是这个用户ID主键也是必须要取出来的.希望大家多多指教.
      

  9.   

    GROUP BY后面也得加上。a000