to:java2000_net
对版规不熟,还请见谅,请版主劳累将原先那个帖子删除。。
http://topic.csdn.net/u/20080421/08/ec93cd7b-5adf-4a1d-9dd9-ce1f1935922b.html?seed=1844985185&t=ffaebga3
问题:表Auditer中有两个字段:UserName和name,它们之间的关系是UserName(1) <-------->(n)name 
如下表所示: 
UserName      Name 
----------------------- 
alex          linda 
alex          jessy 
aaron         messy 
alex          fiona 
tracy         alex 
aaron         howard 
          
要求将表中字段UserName值相同的记录合并为一条记录,其中该记录的Name字段按照当前的顺序用逗号隔开。如 UserName        Name 
------------------------------- 
alex            linda,jessy,fiona 
aaron           messy,howard 
tracy           alex 不知道是否可用sql实现,如不能,用java语言怎么实现? 

解决方案 »

  1.   

    sql不知道怎么整,用java很简单。
    先select distinct UserName from Auditer 得到一个list
    再根据得到的每个username去查询,再得到一个list,把这个拼起来就行了。
      

  2.   

    這么復雜的問題明顯應該去sql板塊問么
    ==========================================
    sql寫不來好復雜啊
    用java的話,可以用hashtable來把大概
    然后做個循環,把相同key的value放到第一個key的value后面,同時移除那條記錄
    放的時候前面+個,
    應該就行了,一個2次循環吧
      

  3.   

    mysql
    select group_concat(name) from Auditer group by UserName;
      

  4.   


    这样的话效率很低,你要去查两次数据库,
    你可以这样
    全部查询出来得到一个ResultSet rs
    Map<String,String> userMap;
    while(rs.next)
    {
         if(userMap.get(rs.getString(1))==null)
         { 
              userMap.put(rs.getString(1),rs.getString(2));
          }else
         { 
             String temp = userMap.get(rs.getString(1));
             userMap.put(rs.getString(1),temp+","+rs.getString(2));
         }
    }
    这样就可以了
      

  5.   

    SQL版这个问题很多:给你段代码 希望对你有帮助
    SQL> WITH A AS (SELECT 10 DEPTNO,'CLARK' ENAME FROM DUAL
      2              UNION
      3              SELECT 10 DEPTNO,'KING' ENAME FROM DUAL
      4              UNION
      5              SELECT 10 DEPTNO,'MILLER' ENAME FROM DUAL
      6              UNION
      7              SELECT 20 DEPTNO,'ADAMS' ENAME FROM DUAL
      8              UNION
      9              SELECT 20 DEPTNO,'FORD' ENAME FROM DUAL
     10              UNION
     11              SELECT 20 DEPTNO,'JONES' ENAME FROM DUAL
     12              UNION
     13              SELECT 20 DEPTNO,'SCOTT' ENAME FROM DUAL
     14              UNION
     15              SELECT 20 DEPTNO,'SMITH' ENAME FROM DUAL
     16              UNION
     17              SELECT 30 DEPTNO,'ALLEN' ENAME FROM DUAL
     18              UNION
     19              SELECT 30 DEPTNO,'BLAKE' ENAME FROM DUAL
     20              UNION
     21              SELECT 30 DEPTNO,'JAMES' ENAME FROM DUAL
     22              UNION
     23              SELECT 30 DEPTNO,'MARTIN' ENAME FROM DUAL
     24              UNION
     25              SELECT 30 DEPTNO,'WARD' ENAME FROM DUAL
     26              )
     27  select DEPTNO,substr(MAX(SYS_CONNECT_BY_PATH(ENAME,',')),2) ENAME FROM
     28     (SELECT DEPTNO,ENAME,ROW_NUMBER()OVER(PARTITION BY DEPTNO ORDER BY DEPTNO ) RN FROM A)
     29     START WITH RN=1
     30     CONNECT BY RN-1=PRIOR RN and deptno=prior deptno
     31     GROUP BY DEPTNO
     32    order by DEPTNO
     33  /
     
        DEPTNO ENAME
    ---------- --------------------------------------------------------------------------------
            10 MILLER,KING,CLARK
            20 JONES,FORD,ADAMS,SCOTT,SMITH
            30 ALLEN,BLAKE,JAMES,MARTIN,WARD
      

  6.   

    高人,原先那个方法确实效率很低。。
    这样做确实不错……
    还有一个问题,如何将得到的userMap转换成List
      

  7.   

    你要怎么转换,得到什么东西,Map 和List是两个接口,一个是key-value形势,一个是索引形式,直接转换肯定不行,你有什么业务需求
      

  8.   

    好晕啊!
    看不太懂,能帮我写一个我这个表的sql吗?
      

  9.   

    首先感谢你的热心帮助!我就是想通过一定方法得出一个List:lstAuditer,这个List用于存放一个JavaBean集合:auditer
    auditerList这个JavaBean有两个String属性:UserName和name。
    所以我需要将得到的map的键和值分别对应UserName和name,set到javabean里面,然后添加到lstAuditer里。
      

  10.   

                    Map<String,String> userMap = new HashMap<String,String>();
    List<Auditer> lstAuditer = new ArrayList<Auditer>();
    Set<Entry<String,String>> set = new HashSet<Entry<String,String>>();

    for(Map.Entry<String, String> entry :set)
    {
    Auditer auditer = new Auditer();
    auditer.setUserName(entry.getKey());
    auditer.setName(entry.getValue());
    lstAuditer.add(auditer);
    }Auditer 是你的javabean  Entry是Map。Entry,