我这有两张表,t_xm,t_ren
t_xm中有xm_id,xm_name,                
t_ren中有xm_id,ren_name,ren_xh(序号),ren_unit(单位)
我在报表中要产生这样的效果项目编号   项目名称          完成人
                             张三(河北大学)
2009001    人员管理系统      李四(河北理工)
                             王五(天涯网络有限公司)
一个项目的完成人可能有很多,但报表中最多显示5个,每个项目的完成人序号从1开始依次向下排的,且如果公司名称太长,会用省略号表示,如 张三(河北网络传媒有限责任…)请问sql语句怎么写,或者这个报表怎么制作
我用的是Delphi+fastreport4.68

解决方案 »

  1.   

    第一个可以用row_number() over (partition by xm_id order by ren_xh) <= 5
    第二个可以用case when ... then ...但是既然是程序,还是建议直接用order by xm_id, ren_xh 
    然后程序做显示处理
      

  2.   

     SELECT T_XM.xm_id,xm_name,CASE WHEN LENGTH(ren_name||'('||ren_unit||')') >=20 THEN SUBSTR(ren_name||'('||ren_unit||')',1,16)||'...)') ELSE ren_name||'('||ren_unit||')' EN AS 完成人
    FROM t_xm,
    (SELECT ren_name,ren_xh,ren_unit,row_number() over (partition by xm_id order by ren_xh)  RN
    FROM t_ren) R
    WHERE T_XM.XM_ID = R.XM_ID
    AND R.RN<=5