1、group by 后想把列合并起来,可以用WMSYS.WM_CONCAT(FIELD_NAME),这在实际写sql中很常用。
2、我们一般在写sql里用group by来分组,有时候要求得到group by的数目时,常常会加上count。这时候如果除了分组的字段,我还要想select其它的字段的话,会报不是分组的字段的错误。而且,我们常常有通过select 出来的内容是根据count(*)排序后的内容,这时候可以用:
OVER(partition by FIELD_NAME1 order by FIELD_NAME2)来进行,且可以根据分组的count的数量进行排序,如:
select *
from (select tunnel_name 隧道名称,CONTENT 事件内容,STYLE 事件类型,AFF_LEVEL 事件等级,location 位置,PLACE_MILE 地点桩号,BEGIN_TIME 发生时间,CENTER_MILE 隧道中心桩号,TUNNEL_LEN 隧道长度,ROAD_LINE_NAME 所属路线,
count(*) OVER(partition by tunnel_name order by tunnel_name) CNT
from epub.tunnel_rank_temp)
order by CNTdesc
3、网上摘录的资料:(原文:http://hi.baidu.com/jinliyixi/blog/item/41f180c75cc0fca48326ace4.html)
wmsys.wm_concat、sys_connect_by_path、自定义函数实现行列转换
构建测试表:
Sql代码
create table TABLE1
(
ID INTEGER,
NAME VARCHAR2(10)
)
create table TABLE2
(
ID INTEGER,
ROLE VARCHAR2(10)
)
insert into TABLE1 (ID, NAME) values (1, '张三');
insert into TABLE1 (ID, NAME) values (2, '李四');
commit;
insert into TABLE2 (ID, ROLE) values (1, '查询');
insert into TABLE2 (ID, ROLE) values (1, '分析');
insert into TABLE2 (ID, ROLE) values (1, '决策');
insert into TABLE2 (ID, ROLE) values (2, '查询');
commit;
create table TABLE1
(
ID INTEGER,
NAME VARCHAR2(10)
)
create table TABLE2
(
ID INTEGER,
ROLE VARCHAR2(10)
)
insert into TABLE1 (ID, NAME) values (1, '张三');
insert into TABLE1 (ID, NAME) values (2, '李四');
commit;
insert into TABLE2 (ID, ROLE) values (1, '查询');
insert into TABLE2 (ID, ROLE) values (1, '分析');
insert into TABLE2 (ID, ROLE) values (1, '决策');
insert into TABLE2 (ID, ROLE) values (2, '查询');
commit;
要求输出结果:
Sql代码
ID NAME ROLE
1 张三 查询,分析,决策
2 李四 查询
ID NAME ROLE
1 张三 查询,分析,决策
2 李四 查询
方法一、使用wmsys.wm_concat
Sql代码
select table1.*,wmsys.wm_concat(role) from table1,table2 where table1.id=table2.id
group by table1.id,table1.name
select table1.*,wmsys.wm_concat(role) from table1,table2 where table1.id=table2.id
group by table1.id,table1.name
方法二、使用sys_connect_by_path
Sql代码
select id, name, ltrim(max(sys_connect_by_path(role, ',')), ',') from
(select row_number() over(partition by table1.id order by name) rn,table1.*, role from table1, table2 where table1.id =
table2.id)
start with rn = 1
connect by prior rn = rn - 1 and prior id = id
group by id, name
order by id
select id, name, ltrim(max(sys_connect_by_path(role, ',')), ',') from
(select row_number() over(partition by table1.id order by name) rn,table1.*, role from table1, table2 where table1.id =
table2.id)
start with rn = 1
connect by prior rn = rn - 1 and prior id = id
group by id, name
order by id
方法三、使用自定义函数
Sql代码
create or replace function my_concat(mid in integer) return varchar2 --记住:参数和返回值里的数据类型都不用定义长度
is
result varchar2(4000); --定义变量,记住Oracle中定义变量不需要
begin
for temp_cursor in (select role from table2 where id=mid) loop --此处在游标FOR循环中使用查询
result :=result || temp_cursor.role || ','; --Oracle中字符连接使用||,而sql server中用+
end loop;
result := rtrim(result,','); --去掉最后一个空格,还有Oracle中的赋值前面没有set
return result;
end;
select table1.*,my_concat(table1.id) from table1,table2 where table1.id=table2.id
group by table1.id,table1.name
order by table1.id
分享到:
相关推荐
工作中经常常会用到的java常用工具类,非常实用。
40个工作中最常会用到的思维模型.pdf
如何将字符串转化为日期; 还有SQL中其他的有关日期表达或者转化的方法。很有帮助,常会用到,方便查询。
在开发数据库应用的时候,我们常会使用 SQL Server Profiler 工具帮我们监控到底应用程序对数据库下了什么 SQL 指令,但是在 SQL Server 2005 Express 版本中并没有提供 SQL Server Profiler 工具,只有 SQL Server ...
SQL SERVER 有资源紧张时,常会有死锁发生,用此工具可进行解锁操作。
建筑和工程行业研究:国常会针对性聚焦民企融资,优质民企再获支持.pdf
在动态拼接字符串时,我们常会用到字符拼接,我对拼接的引号不理解,如: 1、”’+ id +”’ 为什么是3个引号,为什么左边一个加号右边一个加号(能不能着重帮我解释下这个,详细点) SQL code sum(case Leave when...
Windows Script Host(WSH)是个功能强大且易於使用的工具,可用来自动化电脑上的重 覆性工作。本书涵盖了所有关於WSH主要功能的详细资料,以自订的 ActiveX 元件延伸 WSH的功能,以及存取其他自动化物件的相关主题。...
视频监控系统技术规范-通用部分
面试常会问到的题目,经个人总结得出拉的。
TSQL与PL/SQL是两种数据库的数据库操作和控制语言。关于通用性和易用性之间的争论已经说的太多,这里不再延续这一话题。由于两种语言都有庞大的用户群,用惯了一种语言的程序员在刚开始接触另一种语言时常常会感到不...
Office2003的所有图标,程序开发中常会用到
经理人常会犯的错误.ppt
网络安全实验中常会用到 用于被动端口扫描 无病毒
非常实用的Html实例代码,另有常会用到的图片资源
学习开发中常会用到google网页版的开发文档(此帮助文档不是chm类型的哦!),如果你的sdk目录下没有docs文件夹可以考虑下载哦!(下载下来点开index.html就可以查看到了,可能有点卡,建议使用火狐浏览器,打开后按...
用multisim仿真数字频率计,高等教育课程设计中常会用到!
在开发数据库应用的时候,我们常会使用 SQL Server Profiler 工具帮我们监控到底应用程序对数据库下了什么 SQL 指令,但是在 SQL Server 2005 Express 版本中并没有提供 SQL Server Profiler 工具,只有 SQL Server ...
面试中常会出现的问题-版.doc
书里面有一些常会用到开发资源,比较全面。适合各位新手学习