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语言怎么实现?
对版规不熟,还请见谅,请版主劳累将原先那个帖子删除。。
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语言怎么实现?
解决方案 »
- hibernate c3p0连接池问题,有时候会自动断掉
- URL修改 如何把旧url重定向到新的url
- 如何隐藏超链接的参数
- tomcat访问不到指定的页面
- java语言web开发的图片显示问题
- 请问:我的database connection问题,麻烦高手了~!
- 使用JSP插入数据到Inofrmix数据库中发生中文乱码
- 在IE里控制打印宽度和长度,实现在印刷好的固定格式的纸上打印!!!急!!!
- eclipse没设断点也跳进去了。。。。。。。。。。。。。。。。。。。。。。。。。
- 请叫下自己写的这段代码有什么问题呀
- c:out能否输出javascript函数的返回值
- tomact中webapps文件夹的问题????
先select distinct UserName from Auditer 得到一个list
再根据得到的每个username去查询,再得到一个list,把这个拼起来就行了。
==========================================
sql寫不來好復雜啊
用java的話,可以用hashtable來把大概
然后做個循環,把相同key的value放到第一個key的value后面,同時移除那條記錄
放的時候前面+個,
應該就行了,一個2次循環吧
select group_concat(name) from Auditer group by UserName;
这样的话效率很低,你要去查两次数据库,
你可以这样
全部查询出来得到一个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));
}
}
这样就可以了
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
这样做确实不错……
还有一个问题,如何将得到的userMap转换成List
看不太懂,能帮我写一个我这个表的sql吗?
auditerList这个JavaBean有两个String属性:UserName和name。
所以我需要将得到的map的键和值分别对应UserName和name,set到javabean里面,然后添加到lstAuditer里。
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,