表1  学号 姓名   性别    1001  万方  男
   1002  李刚  男
   1003  王红   女
表2 学号 职务
      1001 a
      1001 b
      1002 a
      1003 a查询结果
        学号    姓名   性别  职务
       1001    万方    男    a/b
      1002    李刚    男    a
      1003    王红     女   b

解决方案 »

  1.   

    楼上能详细说一下吗? 如何用wm_sys.wm_concat 
      

  2.   

    select a.学号, a.姓名 , a.性别 replace(WMSYS.WM_CONCAT(b.职务),',','/') id
    from a, b
    where a.学号=b.学号
    group by 学号 姓名  性别 这是10G的用法,10G以下的不能用
    10G以下参考此贴
    http://topic.csdn.net/u/20080505/11/a0958b42-d938-465f-972a-0f61a2969c97.html?seed=491226048
      

  3.   

    select a.学号, a.姓名 , a.性别,replace(WMSYS.WM_CONCAT(b.职务),',','/') id
    from a, b
    where a.学号=b.学号
    group by a.学号,a.姓名, a.性别 
      

  4.   

    group by 学号  自己不可以吗?
      

  5.   

    -- try it
    select a.*, t.v_new
      from a,
           (select a.xh, replace(wm_sys.wm_concat(b.zw), ',', '/') v_new
              from a, b
             where a.xh = b.xh
             group by a.xh) t
     where a.xh = t.xh
      

  6.   

    select 学号,MAX(姓名) as 姓名,MAX(性别) as 性别,MAX(decode(职务,'a','a',''))||'/'||MAX(decode(职务,'b','b','')) from (select 表1.*,表2.职务 from 表1,表2 where 表1.学号 = 表2.学号) group by 学号
      

  7.   

    另一种思路,用早期版本也支持的connect by
    SELECT 学号, 姓名, 性别, 职务
      FROM (SELECT A.学号,
                   A.姓名,
                   A.性别,
                   SUBSTR(SYS_CONNECT_BY_PATH(表2.职务, '/'), 2) AS 职务,
                   RN,
                   MAX_RN
              FROM (SELECT 表1.学号,
                           表1.姓名,
                           表1.性别,
                           表2.职务,
                           ROW_NUMBER() OVER(PARTITION BY 表2.学号 ORDER BY 表2.职务) AS RN,
                           COUNT(*) OVER(PARTITION BY 表2.学号) AS MAX_RN
                      FROM 表1
                      JOIN 表2 ON 表1.学号 = 表2.学号) A
             START WITH A.RN = 1
            CONNECT BY PRIOR A.RN = RN - 1)
     WHERE RN = MAX_RN
      

  8.   

    不好意思,漏了个连接条件
    SELECT 学号, 姓名, 性别, 职务 
      FROM (SELECT A.学号, 
                  A.姓名, 
                  A.性别, 
                  SUBSTR(SYS_CONNECT_BY_PATH(表2.职务, '/'), 2) AS 职务, 
                  RN, 
                  MAX_RN 
              FROM (SELECT 表1.学号, 
                          表1.姓名, 
                          表1.性别, 
                          表2.职务, 
                          ROW_NUMBER() OVER(PARTITION BY 表2.学号 ORDER BY 表2.职务) AS RN, 
                          COUNT(*) OVER(PARTITION BY 表2.学号) AS MAX_RN 
                      FROM 表1 JOIN 表2 ON 表1.学号 = 表2.学号) A 
            START WITH A.RN = 1 
            CONNECT BY PRIOR A.RN = RN - 1 AND PRIOR A.学号=学号
    WHERE RN = MAX_RN 
      

  9.   

    没有数据的可以用下面的查询验证结果
    SELECT rn,max_rn,table_name,pt FROM 
    (SELECT a.table_name,rn,max_rn,
           substr(sys_connect_by_path(column_name,'/'),2) pt
    FROM
    (SELECT x.*,
     row_number() over(PARTITION BY table_name ORDER BY column_name) rn,
     COUNT(*) over(PARTITION BY table_name) max_rn
     FROM User_Tab_Columns x WHERE table_name IN('EQUIP_HOLD','BILLING','SUB_PATH')
    ) A
    START WITH rn=1
    CONNECT BY PRIOR a.table_name=table_name AND PRIOR a.rn=rn-1
    )
    WHERE rn=max_rn
    ORDER BY table_name,rn