`

数据库实现列值合并为行

 
阅读更多

转载自:http://hi.baidu.com/wangzhiqing999/blog/item/40982215996caa62cb80c46e.html

 

CREATE TABLE TestTitle (
  name   VARCHAR(10),
  seq    INT,
  title  VARCHAR(10)
);

 

INSERT INTO TestTitle VALUES ('张三', 3, '程序员');
INSERT INTO TestTitle VALUES ('张三', 1, '系统管理员');
INSERT INTO TestTitle VALUES ('张三', 2, '网络管理员');

INSERT INTO TestTitle VALUES ('李四', 2, '项目经理');
INSERT INTO TestTitle VALUES ('李四', 1, '系统分析员');

 

这里要求 是, 合并后, 字符的顺序,是按照  seq  来排序的

也就是最后的结果,希望是

李四     系统分析员,项目经理

张三     系统管理员,网络管理员,程序员

 

 

 

对于MySQL使用 GROUP_CONCAT 函数 的方式进行处理

 首先是 不排序的情况下,默认的查询结果:

 

 

mysql> SELECT
    ->   name,
    ->   GROUP_CONCAT(title) AS allTitle
    -> FROM
    ->   TestTitle
    -> GROUP BY
    ->   name;
+------+------------------------------+
| name | allTitle                     |
+------+------------------------------+
| 李四 | 项目经理,系统分析员          |
| 张三 | 程序员,系统管理员,网络管理员 |
+------+------------------------------+
2 rows in set (0.00 sec)

 

然后是按照 seq   的顺序进行排列的查询结果:

mysql> SELECT
    ->   name,
    ->   GROUP_CONCAT(title) AS allTitle
    -> FROM
    ->   (
    ->   SELECT
    ->     name,
    ->     title
    ->   FROM
    ->     TestTitle
    ->   ORDER BY
    ->     seq
    ->   ) as subQuery
    -> GROUP BY
    ->   name;
+------+------------------------------+
| name | allTitle                     |
+------+------------------------------+
| 李四 | 系统分析员,项目经理          |
| 张三 | 系统管理员,网络管理员,程序员 |
+------+------------------------------+
2 rows in set (0.00 sec)

 

 

 

对于Oracle使用 WMSYS.WM_CONCAT 函数 的方式进行处理

 

首先是 不排序的情况下,默认的查询结果:

SQL>
SQL> SELECT
  2    name,
  3    WMSYS.WM_CONCAT(title) AS allTitle
  4  FROM
  5    TestTitle
  6  GROUP BY
  7    name;

NAME
----------
ALLTITLE
-------------------------------------------
李四
项目经理,系统分析员

张三
程序员,系统管理员,网络管理员


 

然后是按照 seq   的顺序进行排列的查询结果:

SQL> with myCTE AS
  2  (
  3    SELECT
  4      name,
  5      seq,
  6      WMSYS.WM_CONCAT(title)
  7          OVER(PARTITION BY  name   ORDER BY   seq) AS allTitle
  8    FROM
  9      TestTitle
 10  )
 11  SELECT
 12    name, allTitle
 13  FROM
 14    myCTE
 15  WHERE
 16    NOT EXISTS(
 17      SELECT 1
 18      FROM myCTE sub
 19      WHERE myCTE.name = sub.name
 20        AND myCTE.seq < sub.seq
 21    );

NAME
----------
ALLTITLE
--------------------------------------------------------------
李四
系统分析员,项目经理

张三
系统管理员,网络管理员,程序员


 

select 
from ipms_case,(
		select case_id  
		       ,ltrim(sys_connect_by_path(name, '$@$'), '$@$') as name   
			   ,ltrim(sys_connect_by_path(SERVER_HOSTING_ADDRESS, '$@$'), '$@$') as SERVER_HOSTING_ADDRESS   
			   ,ltrim(sys_connect_by_path(ICP_REC_NUM , '$@$'), '$@$') as ICP_REC_NUM  
			   ,ltrim(sys_connect_by_path(ICP_REG_ADDR, '$@$'), '$@$') as ICP_REG_ADDR
			   ,ltrim(sys_connect_by_path(HOME_WEB_URL, '$@$'), '$@$') as HOME_WEB_URL   
			   ,ltrim(sys_connect_by_path(IP_ADDR, '$@$'), '$@$') as IP_ADDR   
		from  
		    (
				select  asso.case_id as case_id
				,site.NAME as name
				,site.SERVER_HOSTING_ADDRESS as SERVER_HOSTING_ADDRESS
				,site.ICP_REC_NUM as ICP_REC_NUM 
				,site.ICP_REG_ADDR as ICP_REG_ADDR
				,site.HOME_WEB_URL as HOME_WEB_URL
				,site.IP_ADDR as IP_ADDR
				,(row_number()  over(partition by asso.case_id order by asso.case_id)  ) numid    
				from IPMS_CASE_SITE_ASSO asso,ipms_website site
				where asso.SITE_ID=site.id 
			)
		 
		   start with numid = 1    
		   connect by numid - 1 = prior numid    and case_id = prior case_id   
)

 

分享到:
评论

相关推荐

    SQLServer中如何将一个字段的多个记录值合在一行显示

    SQLServer 中将一个字段的多个记录值合并到一行显示的实现方法 SQL Server 是一种关系型数据库管理系统,具有强大的数据处理能力和存储能力。在实际应用中,我们经常需要将一个字段的多个记录值合并到一行显示,以...

    神通数据库-数据库快速入门.pdf

    效地减少数据库中的数据冗余,并为实现灵活的数据安全机制提供了基础。 • 支持存储过程 使用数据库创建应用程序时,过程语言是应用程序和数据库之间的主要编程接口。神通数据库中所提 供的过程语言是 plOSCAR。在...

    2016年《数据库原理及应用》期末考试题及答案.pdf

    3. 关系数据库设计:在关系数据库设计中,表中任意两行的值不能一样,行在表中的顺序无关紧要,列在表中的顺序无关紧要。 4. 数据库系统的体系结构:数据库系统的体系结构是一般来说数据库系统应具有三级模式体系...

    达梦数据库_SQL语言手册

    新、旧行值的引用 触发器谓词 变异表 设计触发器的原则 触发器的删除 禁止和允许触发器 触发器应用举例 使用触发器实现审计功能 使用触发器维护数据完整性 使用触发器保障数据安全性 使用触发器派生字段...

    SQLServer数据库性能优化[借鉴].pdf

    1.如果规范化设计产生了许多 4 路或更多路合并关系,就可以考虑在数据库实体(表)中加入重复属性(列)。 2.常用的计算字段(如总计、最大值等)可以考虑存储到数据库实体中。 3.重新定义实体以减少外部属性数据或...

    软件工程大二下数据库复习1

    索引是对数据库表中一列或多列的值进行排序的一种结构,建立索引可以加快查询速度。 六、存储过程 存储过程是一组为了完成特定功能的 SQL 语句集,经编译后存储在数据库中。使用存储过程具备如下优点:重复使用、...

    Access数据库应用技术-教案-课题:-任务5-创建交叉表查询.docx

    创建交叉表查询的教学目标是使学生掌握创建交叉表查询的操作技能,包括创建交叉表的行标题、列标题和值的设置,以及如何使用交叉表来分析和统计数据。 三、创建交叉表查询的教学方法 创建交叉表查询的教学方法可以...

    南大-数据库原理第二次作业.doc

    关系是指一个表中的数据,包括行和列。函数依赖是指一个属性的值决定了另一个属性的值。 关系代数 关系代数是指对关系进行操作的数学理论。关系代数包括选择、投影、连接、交叉和差分等运算。这些运算可以用于对...

    数据库设计准则及方法论.docx

    对于同一套数据库逻辑设计,不同的数据库产品有不同的实现方法,下面的表格列出了不同数据库产品的实现技术。 逻辑架构 实现技术 对称多处理器(SMP) 基本所有商业数据库都支持 Sharing Nothing架构(多分区数据库) ...

    Access 2000数据库系统设计(PDF)---025

    21510.2.1 创建传统的单列等值连接 21610.2.2 为查询结果集指定排序次序 21810.2.3 使用表之间的间接关系创建查询 21910.2.4 创建多列等值连接和选择唯一值 22010.3 使用表中的查找字段 22210.3.1 用查阅向导添加...

    ORACLE,mysql,sqlserver,sybase数据库装文本软件

    自己写的数据库装载工具,平时工作中用于装载大文本文件到数据库表,也能直接装载excel,不过excel只能使用第一个sheet,且不支持合并的单元格。 jdk要求版本1.6及以上。 使用方法: java -jar lynload.jar,即可看到...

    数据库的查询和视图(共73张PPT).pptx

    例如,假设要从 T 表中选择 T1的行,那么运算式为:σ F(T),其中 F 为 T1。 投影运算符(Projection) 投影运算符用于从表中选择指定的属性值组成一个新表。投影运算符的记号为 Π(pi),其格式为:Π A(R),...

    实验5 数据库的集合查询和统计查询实验.doc

    若要把多个 SELECT 语句的结果合并为一个结果,可用集合来完成。集合操作主要包括并操作 UNION、交操作 INTERSECT 和差操作 MINUS(EXCEPT)。 SQL SERVER 中的集合操作: * UNION:并操作,将多个 SELECT 语句的...

     数据库头歌select.docx

    子查询用于计算每种资产类型的投资金额,并将其合并为总投资金额。 知识点: * 左连接(LEFT JOIN):用于连接两个表,其中左表中的每一行都将被返回,即使右表中没有匹配的行。 * 子查询(SUBQUERY):是一种嵌套...

    Access 2000数据库系统设计(PDF)---002

    21510.2.1 创建传统的单列等值连接 21610.2.2 为查询结果集指定排序次序 21810.2.3 使用表之间的间接关系创建查询 21910.2.4 创建多列等值连接和选择 唯一值 22010.3 使用表中的查找字段 22210.3.1 用查阅向导添加...

    Access 2000数据库系统设计(PDF)---018

    21510.2.1 创建传统的单列等值连接 21610.2.2 为查询结果集指定排序次序 21810.2.3 使用表之间的间接关系创建查询 21910.2.4 创建多列等值连接和选择唯一值 22010.3 使用表中的查找字段 22210.3.1 用查阅向导添加...

    Access 2000数据库系统设计(PDF)---003

    21510.2.1 创建传统的单列等值连接 21610.2.2 为查询结果集指定排序次序 21810.2.3 使用表之间的间接关系创建查询 21910.2.4 创建多列等值连接和选择 唯一值 22010.3 使用表中的查找字段 22210.3.1 用查阅向导添加...

    Access 2000数据库系统设计(PDF)---011

    21510.2.1 创建传统的单列等值连接 21610.2.2 为查询结果集指定排序次序 21810.2.3 使用表之间的间接关系创建查询 21910.2.4 创建多列等值连接和选择唯一值 22010.3 使用表中的查找字段 22210.3.1 用查阅向导添加...

    Access 2000数据库系统设计(PDF)---020

    21510.2.1 创建传统的单列等值连接 21610.2.2 为查询结果集指定排序次序 21810.2.3 使用表之间的间接关系创建查询 21910.2.4 创建多列等值连接和选择唯一值 22010.3 使用表中的查找字段 22210.3.1 用查阅向导添加...

Global site tag (gtag.js) - Google Analytics