小妹刚刚接触oracle,现在想查一个含有住院患者手术信息(手术编码---手术日期---手术操作名称---切口愈合)的数据,关联数据库中的住院病人基础信息表和手术操作表,基础信息表中主键为住院序号,手术操作表中主键是手术序号,两表关联字段为住院序号。
由于一个病人同一次住院过程中可能要做多个手术,或不做手术,所以手术操作表中一个住院序号对应0、1或多条(可能大于5条)记录。
但现在要求查询结果中一个住院序号只能对应一条记录,其中手术信息部分需要显示为手术信息1、手术信息2、...手术信息5的格式。
请问sql应该怎么写呢?请坛子里各位大牛指点指点,感激不尽~

解决方案 »

  1.   

    麻烦把表名称以及字段列出来,还有方便把数据也列出来!这样大家好帮你写sql。
      

  2.   

    初步判断为字符串合并的意思
    用wm_concat函数select id,wm_concat(num) from tb
    group by id
      

  3.   

    --基本信息表
    a_caseinfo_export
    --字段:住院序号、姓名
    ninhosid,name
    -------------------------------------------------------------------
    --手术操作表
    a_caseopsinfo
    --字段:手术序号、住院序号、手术编码、手术日期、手术操作名称、切口、切口等级
    opsid,ninhosid,opscode,opsdate,opsname,cutlevel,level
    --------------------------------------------------------------------
    --查询结果需要形如:
    住院序号--姓名---手术编码1---手术日期1---手术操作名称1---切口1---切口等级1---手术编码2---手术日期2---手术操作名称2---切口2---切口等级2---...---手术编码5---手术日期5---手术操作名称5---切口5---切口等级5
    希望能用sql搞定。pl/sql完全不懂。
    谢谢各位啦!
      

  4.   

    哦,对了,不知道是否还应该说明一下,我只有查询的权限,也就是说这个select应该怎么写?
      

  5.   


    select a.ninhosid as 住院序号,b.name as 姓名,a.opscode as 手术编码1,a.opsdate as 手术日期1,a.opsname as 手术操作名称 ```
    from a_caseinfo_export b,a_caseopsinfo a
    where 条件 如果需要的话??
      

  6.   


    select a.ninhosid as 住院序号,b.name as 姓名,a.opscode as 手术编码1,a.opsdate as 手术日期1,a.opsname as 手术操作名称 ```
    from a_caseinfo_export b,a_caseopsinfo a
    where  a.ninhosid = b.ninhosid
    and 其他条件 如果需要的话
      

  7.   

    行转列的通用过程
    create or replace procedure proc(tabname in varchar2,
                                      col1 in varchar2,
                                      col2 in varchar2,
                                      col3 in varchar2,
                                      viewname in varchar2 default 'v_tmp')
    as
      sqlstr varchar2(2000):='create or replace view '||viewname||' as select '||col1||' ';
      c1 sys_refcursor;
      v1 varchar2(100);
    begin
      open c1 for 'select distinct to_char('||col2||') from '||tabname;
      loop
        fetch c1 into v1;
        exit when c1%notfound;
        sqlstr:=sqlstr||'
      ,max(decode('||col2||','''||v1||''','||col3||'))"'||v1||'"';
      end loop;
      close c1;
      sqlstr:=sqlstr||' from '||tabname||' group by '||col1;
      execute immediate sqlstr;
    end proc;