实现多行合并一行的SQL写法
[ORACLE]
项目中遇到一个需求,需要将多行合并为一行。
表结构如下:
NAME Null Type
------------------------ --------- -----
N_SEC_CODE NOT NULL CHAR(6)
C_RESEARCHER_CODE NOT NULL VARCHAR2(20)
此表保存了“股票”与“研究员”的对应关系数据,一般而言,对于同一只股票而言,可能有多个研究员
对其进行跟踪研究。所以目前遇到一个要求,需查询出每只股票和对应的研究员(研究员代码间,使用逗号分隔)。
例如有如下数据:
000297 chenpeng
000297 liusu
合并处理后需显示为:
000297 chenpeng,liusu
网上查了很多方法,但通常而言都是编写自定义多行文本合并函数,或者对支持的列数具有局限性。
最后在英文google中搜到如下比较巧的方法。不用在数据库中增加function,纯SQL一次性搞定,
而且扩充性很好,没有列的限制。
主要SQL如下:
SELECT n_sec_code, TRANSLATE (LTRIM (text, '/'), '*/', '*,') rese
相关文档:
性能监控之监控SQL语句
分析表
analyze table tablename compute statistics for all indexes;
analyze table tablename compute statistics for all indexed columns;
analyze table tablename compute statistics for table;
监控事例的等待
select event,sum(decode(wait_Tim ......
SQL语句中的Having子句与where子句之区别
---WHERE句子作用于基本表或试图,从中选择满足条件的元组。HAVING作用于组,从中选择满足条件的组---
在说区别之前,得先介绍GROUP BY这个子句,而在说GROUP子句前,又得先说说“聚合函数”——SQL语言中一种特殊的函数。例如SUM, COUNT, MAX, AVG等。这 ......
SET TIMING ON | OFF
SQL> set timing on
SQL> select * from emp where empno = 7369;
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- ----------- ---------- ----------
DEPTNO
----------
7369 SMITH CLERK ......
查询优化的目的是提高数据检索速度,提高数据检索意味着减少磁盘
IO
读取或者逻辑内存读取次数,这需要从两个方面入手:数据要尽可能的缓存到内存、尽可能的使用索引。内存的问题可以参见
:
http://msdn.microsoft.com/zh-cn/library/ms188284.aspx
,本文主要是体现如何使用索引来提高速度。具体方法:
1) ......