`

数据库实现列值合并为行

 
阅读更多

转载自: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   
)

 

分享到:
评论

相关推荐

    数据库合并列数据

    总之,合并列数据是数据库管理中的一种常见需求,可以通过自定义函数或存储过程实现。在SQL Server中,如果涉及到.NET组件,可能需要启用CLR支持。在进行此类操作时,务必理解其潜在影响,并遵循最佳实践,以避免...

    合并列值

    - **描述**:“合并列值”进一步强调了文章的主要目的:介绍一种方法来实现列值的合并。 #### 关键词解析 - **合并**:指的是将多个数据项组合成一个单一的数据项。 - **列值**:指的是数据库表中某一列的所有行...

    Mysql、oracle、Sybase数据库两列合并成一列的sql语句

    在数据库管理与开发过程中,经常会遇到需要将表中的两列数据合并为一列的情况。这种需求常见于数据清洗、报表生成或数据展示等场景。不同的数据库管理系统(Database Management System,DBMS)提供了各自的方法来...

    用子表的方式解决ireport相同列合并问题

    这个问题在传统的表格布局中可能不那么突出,但在复杂报表设计中,尤其是数据分组时,重复列的合并显得尤为重要,因为它可以有效地节省空间并提高报表的可读性。本文将详细介绍一种解决方案,即利用子报表的方式来...

    合并table的行

    1. **多列合并**:除了基于单列进行合并外,还可以根据多列的组合值来决定行的合并,这需要对代码进行相应的调整,可能涉及到更复杂的比较逻辑。 2. **性能优化**:在处理大数据量时,直接在UI层进行行合并可能会...

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

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

    根据相同的key合并值(行转列)

    标题中的“根据相同的key合并值(行转列)”是指在数据处理中的一种常见操作,它通常涉及到数据库查询、数据分析或编程中的数据整理。这个过程旨在将具有相同标识键(key)的数据行聚合到一起,将多行数据转换为单行,...

    sql行转列合并GrideView单元格 实现类似Excel效果

    1. **SQL行转列**:在数据库查询中,Pivot操作用于将行数据转换为列数据。例如,原本存储在多行中的某个分类下的产品信息可以通过Pivot转换为每种产品类别占一列的形式。在SQL Server中,可以使用PIVOT关键字实现;...

    table根据第一列将同名行合并(合并行)

    标题中的“table根据第一列将同名行合并(合并行)”指的是在处理表格数据时,如果发现连续的行具有相同的某一列(通常是第一列)的值,我们可以将这些行进行合并,只保留一行并整合其他列的信息。这种操作在数据分析...

    table合并单元格的多种方法

    在表格(Table)设计中,有时我们需要合并单元格来达到特定的展示效果,例如创建标题行或列,或者为了美观和布局对齐。在HTML、CSS以及JavaScript中,都有多种方式可以实现单元格的合并。这里我们将详细探讨六种合并...

    列式数据库存储原理.pdf

    位图索引是一种轻量级的索引类型,特别适合于列值较少的情况。位图索引将每个不同的值映射到一个位向量上,位向量中的每一位表示该行是否含有对应的值。 **位向量压缩**:通过分段长度编码等方式对位向量进行压缩,...

    【Java开发bug100例】1.java代码实现合并列(csdn)————程序.pdf

    整个过程可以理解为:为每个列创建一个IF函数,检查列值是否为null,然后将结果合并到一个单一的表达式或列中。这在SQL查询中很有用,特别是当你想要避免因null值而引发的错误或者在合并数据时保持一致性。 在实际...

    C# DataGridView 合并单元格

    在默认情况下,每个单元格都是独立的,但通过编程方式,我们可以实现跨行或跨列的单元格合并。 合并单元格的基本思想是设置`DataGridView`的`DefaultCellStyle`属性,特别是`MergeStyle`属性。`MergeStyle`有几种...

    java行转列的例子

    - **转换逻辑**: 在遍历过程中,根据需要将行数据拆分成列,或者将多个列数据合并成一行。 3. Java 8 Stream API: - Java 8引入的Stream API提供了函数式编程的能力,可以优雅地处理数据转换。例如,可以使用...

    如何使多个数据库的表格合并成一张表并显示在一个gridview中.doc

    `这行代码会在子表中添加一个名为Name的新列,其值来自于父表的相关记录。 最后,对于查询条件,可以通过对DataSet的表进行过滤,或者在GridView上设置数据绑定时提供筛选条件。在给定的代码片段中,虽然没有显示...

    SQL合并一列

    在SQL Server中,可以通过这种方式轻松地将多行数据转换为单行数据,实现列的合并。 #### 3. 示例代码解析 提供的示例代码展示了如何使用`FOR XML PATH`来合并一列数据: ```sql SELECT -- 使用STUFF函数去除第...

    access行转列示例

    这通常用于将多列的值合并到一列中,同时创建一个新列来标识原列的位置。比如,如果我们的数据表有年份、产品和销售额三列,而我们希望按产品查看历年销售额,可以将年份列转为行,这样每个产品的历年销售额都会在...

    asp.net_合并GridView中某列相同信息的行(单元格

    下面的方法是在 ASP.NET 中合并 GridView 中某列相同信息的行的一种实现方式。该方法名为 `GroupRows`,接受两个参数:一个 `GridView` 对象和一个整型数字,表示需要合并的列的索引。 ```csharp public static ...

    delphi dbgrid有条件合并单元格

    在这个事件中,你可以访问当前单元格的信息,比如值、列索引、行索引等,然后根据业务逻辑判断是否应该合并。 ```delphi procedure TForm1.DBGridEh1DrawColumnCell(Sender: TObject; const Canvas: TCanvas; ...

    GridView中单元格合并

    在传统的表格布局中,每个单元格(cell)代表一行一列的交叉点,而合并单元格则是将多个相邻的单元格合并为一个大的单元格,这在显示分组数据、创建标题或者简化布局时特别有用。在GridView中,我们可以通过编程的...

Global site tag (gtag.js) - Google Analytics